【问题标题】:Swift 3 UICollectionView reusable section header will not displaySwift 3 UICollectionView 可重用部分标题不会显示
【发布时间】:2017-01-05 16:10:39
【问题描述】:

在带有 Xcode 8.2 的 swift 3 中,我无法使用 UICollectionView 显示 reusableHeaderView。我在我的头视图文件中的不同点放置了断点,它们永远不会被触发。这是我的代码。

import UIKit

class WishListViewController: UIViewController,
                         UICollectionViewDelegateFlowLayout,
                         UICollectionViewDataSource {

var collectionView: UICollectionView!

var wishListItems = [[String:Any]]()

var shops = [[String: Any]]()

let cellId = "WishListCell"

let headerId = "WishListHeaderView"

var screenSize: CGRect!
var screenWidth: CGFloat!
var screenHeight: CGFloat!

let imageAspectRatio: CGFloat = 1.2

override func viewDidLoad() {

    super.viewDidLoad()

    screenSize = UIScreen.main.bounds
    screenWidth = screenSize.width
    screenHeight = screenSize.height

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    layout.itemSize = CGSize(width: screenWidth, height: ((screenWidth / 3) * imageAspectRatio) + 20)
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    layout.estimatedItemSize.height = ((screenWidth / 3) * imageAspectRatio) + 20
    layout.estimatedItemSize.width = screenWidth

    collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)

    collectionView.delegate = self

    collectionView.dataSource = self

    collectionView.register(WishListCell.self, forCellWithReuseIdentifier: cellId)

    collectionView.register(WishListHeaderView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: headerId)

    collectionView.backgroundColor = UIColor.white

    self.view.addSubview(collectionView)

    // Do any additional setup after loading the view.
}

func collectionView(_ collectionView: UICollectionView,
                    viewForSupplementaryElementOfKind kind: String,
                    at indexPath: IndexPath) -> UICollectionReusableView {

    switch kind {

    case UICollectionElementKindSectionHeader:

        let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind,
                                                                         withReuseIdentifier: headerId,
                                                                         for: indexPath) as! WishListHeaderView

        headerView.textLabel.text = shops[indexPath.section]["shop_name"] as? String

        return headerView

    default:

        assert(false, "Unexpected element kind")
    }
}

这是我的头视图文件。

import UIKit

class WishListHeaderView: UICollectionReusableView {

var textLabel: UILabel

let screenWidth = UIScreen.main.bounds.width

override init(frame: CGRect) {

    textLabel = UILabel()

    super.init(frame: frame)

    self.addSubview(textLabel)

    textLabel.font = UIFont.systemFont(ofSize: UIFont.smallSystemFontSize)

    textLabel.textAlignment = .left

    textLabel.numberOfLines = 0

    textLabel.lineBreakMode = NSLineBreakMode.byWordWrapping

    textLabel.translatesAutoresizingMaskIntoConstraints = false

    NSLayoutConstraint.activate([


        NSLayoutConstraint(item: textLabel, attribute: .leading, relatedBy: .equal,
                           toItem: self, attribute: .leadingMargin,
                           multiplier: 1.0, constant: 0.0),

        NSLayoutConstraint(item: textLabel, attribute: .trailing, relatedBy: .equal,
                           toItem: self, attribute: .trailingMargin,
                           multiplier: 1.0, constant: 0.0),
        ])

    self.backgroundColor = .white

}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

【问题讨论】:

    标签: swift3 uicollectionreusableview


    【解决方案1】:

    您需要为集合视图的标题功能实现高度。

    func collectionView(_ collectionView: UICollectionView,
                     layout collectionViewLayout: UICollectionViewLayout,
                     referenceSizeForHeaderInSection section: Int) -> CGSize
    

    然后返回你想要的高度。

    【讨论】:

    • 仅供参考,您需要实现 UICollectionViewDelegateFlowLayout 才能访问此功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多