【问题标题】:UICollectionView with custom layout - how/where to add a supplementary view programmatically?具有自定义布局的 UICollectionView - 如何/在何处以编程方式添加补充视图?
【发布时间】:2013-07-09 12:31:56
【问题描述】:

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

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

我一直在查看Introducing Collection Views 示例,但无法真正理解该项目中如何定义补充视图。似乎它们是使用流布局在情节提要中注册的,但我不知道该项目中的后续布局更改如何移动补充视图。

【问题讨论】:

标签: iphone ios objective-c uicollectionview uicollectionviewlayout


【解决方案1】:

这个想法是您返回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:) 从其数据源获取实际视图。

【讨论】:

  • 这很正确,我花了大约 1 小时来解决这个问题,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多