Swift:Header 个 UICollectionViewController 与单元格重叠

Swift: Header of UICollectionViewController overlaps cells

我有一个 UICollectionViewController,想添加一个自定义 header。

我在 CollectionViewController 的 Interface Builder 中检查了 Section Header,并在我的子类中实现了 viewForSupplementaryElementOfKind 函数。

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {

    switch kind {

    case UICollectionElementKindSectionHeader:

        let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "myHeaderIdentifier", for: indexPath)

        // !! NOT WORKING PROPERLY
        // sectionHeader overlaps other cells

        headerView.backgroundColor = UIColor(hue: 0.9, saturation: 1.0, brightness: 0.9, alpha: 1.0)
        headerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 250.0)

        return headerView

    default:
        assert(false, "Unexpected element kind")
    }

}

更改生效,但 header(下面屏幕截图中的粉红色区域)现在与 collectionView 中的常规单元格重叠。

我做错了什么? 感谢任何帮助!

public func layoutAttributesForSupplementaryElementOfKind(kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes?

这里相信你应该可以设置frame/height

UICollectionViewFlowLayout 中还有 headerReferenceSize,您可以在创建 collectionView 时设置它是否是静态的

使用 UICollectionViewDelegateFlowLayout 协议中的此方法:

optional func collectionView(_ collectionView: UICollectionView, 
                  layout collectionViewLayout: UICollectionViewLayout, 
      referenceSizeForHeaderInSection section: Int) -> CGSize {
    return CGSize(width: UIScreen.main.bounds.width, height: 250.0)
}

确保将您的 class 设置为流布局的委托。您可以找到更多信息 here.