以编程方式设置集合视图标头的动态高度的最佳方法?

时间:2018-07-11 11:02:03

标签: ios swift uicollectionview height uicollectionreusableview

我有一个视图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作为我的收藏视图中一个区域的标题,因此我可能不需要出队并重新使用它?

0 个答案:

没有答案