具有自定义布局的UICollectionView - 以编程方式添加补充视图的方式/位置?

时间:2013-07-09 12:31:56

标签: iphone ios objective-c uicollectionview uicollectionviewlayout

我正在使用一个Circle Layout的示例,使用UICollectionView和故事板中定义的自定义布局类。

是否有某种教程或逐步说明如何将补充视图添加到使用自定义布局的集合视图?

我一直在查看Introducing Collection Views示例,但无法真正了解该项目中如何定义补充视图。看起来它们是使用流程布局在故事板中注册的,但是我不知道该项目中的后续布局变化如何移动补充视图。

1 个答案:

答案 0 :(得分:0)

想法是您返回UICollectionViewLayoutAttributes中的补充视图的layoutAttributesForElements(in:)。例如,在您的UICollectionViewLayout子类中:

var headerAttributes: UICollectionViewLayoutAttributes!

override func prepare() {
    headerAttributes = UICollectionViewLayoutAttributes(
        forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader,
        with: IndexPath(item: 0, section: 0))
    headerAttributes.frame = CGRect(x: 0, y: 0, width: 100, height: 40)
}

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
    if headerAttributes.frame.intersects(rect) {
        return [headerAttributes]
    } else {
        return nil
    }
}

重要的部分是使用forSupplementaryViewOfKind:初始化程序创建属性。通过从此方法返回补充视图的属性,收集视图知道这些视图存在以及它们的位置,并将调用collectionView(_:viewForSupplementaryElementOfKind:at:)从其数据源获取实际视图。