这些是我将自己的视图添加为标题的步骤:
创建新视图:
class HeaderView: UICollectionReusableView {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
self.backgroundColor = .red
}
}
在viewDidLoad
内注册视图:
self.collectionView?.register(HeaderView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "header")
实施referenceSizeForHeaderInSection
委托:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width:view.frame.size.width, height:100.0)
}
实施viewForSupplementaryElementOfKind
委托:
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
switch kind {
case UICollectionElementKindSectionHeader:
let header = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "header", for: indexPath) as! HeaderView
header.setNeedsLayout()
return header
default:
return UICollectionReusableView()
}
}
但它并不起作用。运行应用时,我的referenceSizeForHeaderInSection
和viewForSupplementaryElementOfKind
未被调用。
我确实在viewDidLoad
内设置了我的代表:
self.collectionView?.delegate = self
我错过任何一步吗?或者我做错了什么?
编辑:
忘记提及:我使用的是自定义布局,不确定是否重要,但在选择自定义布局的故事板中,Section Header
选项会消失。
答案 0 :(得分:1)
在您的情况下,您需要正确配置您的布局以显示部分标题。
使用自定义布局时,根本不需要实现referenceSizeForHeaderInSection
。这是UICollectionViewDelegateFlowLayout
的一种方法。这就是没有被召唤的原因。