目前我在我的UICollectionViewController子类中引用了一个UICollectionView标头,如下所示:
class HeaderCollectionViewController: UICollectionViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Register header view XIB
collectionView?.register(UINib(nibName: headerNibName, bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: headerReuseIdentifier)
// Configure header view height
headerView?.height = HeaderViewHeight(
origin: 250.0,
max: UIScreen.main.bounds.height
)
}
var headerView: HeaderView? {
// Convenience getter for HeaderView
get {
guard let headerView = collectionView?.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: IndexPath(row: 0, section: 0)) as? HeaderView else { return nil }
return headerView
}
}
}
这个吸气者看起来非常漫长,而且看起来也很脆弱。
是否有更清晰的方式来引用标题补充视图?或者这是唯一的方法吗?
我是否有某种方法可以利用出列机制来存储它(因为我已经检索它了?)
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let headerView: HeaderView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerReuseIdentifier, for: indexPath) as! HeaderView
return headerView
}
答案 0 :(得分:1)
您可以摆脱使用headerView
作为计算属性,只需为HeaderView
方法中创建的viewForSupplementaryElementOfKind
分配即可。如果您只需要配置其高度,则可以使用UICollectionViewDelegateFlowLayout
方法:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(
width: collectionView?.bounds.width,
height: someHeaderViewHeight
)
}