Swift3 Swift 3 UICollectionView可重用节标题将不显示
在带有Xcode 8.2的swift 3中,我无法使用Swift3 Swift 3 UICollectionView可重用节标题将不显示,swift3,uicollectionreusableview,Swift3,Uicollectionreusableview,在带有Xcode 8.2的swift 3中,我无法使用UICollectionView显示reusableHeaderView。我在头视图文件中的不同点上放置了断点,它们从不被触发。这是我的密码 import UIKit class WishListViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICo
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")
}
}
您需要为集合视图实现标题高度功能
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
referenceSizeForHeaderInSection section: Int) -> CGSize
然后返回所需的高度。FYI您需要实现
UICollectionViewDelegateFlowLayout
才能访问此功能