我有一个视图HeaderView
,它是UICollectionReusableView
的子类,并且是UIStackView
,它安排了一些带有标签的子视图。这些标签的数量和文字取决于向服务请求的信息。
这种视图通过以下方式注册到collectionView
:
collectionView.register(HeaderView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: HeaderView.reuseIdentifier)
然后我实现了collectionView(_:viewForSupplementaryElementOfKind:at:)
这样的方法:
public func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
switch kind {
case UICollectionElementKindSectionHeader:
if let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind,
withReuseIdentifier: HeaderView.reuseIdentifier,
for: indexPath) as? HeaderView {
// Provide the headerView with the texts it needs to show
return headerView
}
fatalError("no view")
default:
fatalError("no view")
}
}
,并且还实现了collectionView(_:layout:referenceSizeForHeaderInSection:)
方法。
我的问题是collectionView(_:layout:referenceSizeForHeaderInSection:)
首先被调用,并且此时headerView还没有被实例化,所以我无法获得它的实际高度。我也不能提供固定高度,因为正如我所说的,headerHeader的高度将取决于我从服务中获得的信息,并且该信息将是可变的。
我既不使用情节提要或Xib文件,而是在创建所有视图并在代码中设置布局。
我还应该补充一点,实际上我需要这个HeaderView
作为我的收藏视图中一个区域的标题,因此我可能不需要出队并重新使用它?