集合视图中不同部分的布局不同

时间:2019-08-27 14:37:08

标签: ios swift uicollectionview uicollectionviewlayout uicollectionviewflowlayout

我有一个包含3个部分的集合视图,前两个部分可以与UICollectionViewFlowLayout配合使用,但是第3个部分需要自定义实现。

我知道集合视图只能有一个布局,因此,如果我在正确的部分中,我一直试图仅在覆盖的prepare函数中执行工作。这是它容易崩溃的地方,我无法找出一种简单的方法来找出要为其计算布局属性的单元格所在的部分。

不确定是否有比在prepare函数中有条件执行计算更好的方法。

朝着正确的方向前进会很棒!

1 个答案:

答案 0 :(得分:0)

我认为这是一个好方法:

1-使用自己的.xib文件创建自定义部分

class CustomSection: UICollectionReusableView {

    override func awakeFromNib() {
        super.awakeFromNib()
    }
}

2-实现UICollectionViewDelegateFlowLayout委托方法

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

        // In case its a section header (UICollectionElementKindSectionFooter for footer)
        if kind == UICollectionElementKindSectionHeader {

            // This will be the section number

            let section = indexPath.section

            if section == 3 {

                let customSection = collectionView.dequeueReusableSupplementaryView(ofKind: kind,withReuseIdentifier: "CustomSection", for: indexPath) as! CustomSection
                return customSection

            }
            else {

               //TODO: Return your default section

            }

        }
}

3-不要忘记在您的UICollectionView中注册该部分

let customSectionNib = UINib.init(nibName: "CustomSection", bundle: nil)
        collectionView.register(customSectionNib, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "CustomSection")