我正在尝试为UICollectionView创建一个简单的自定义布局,以便以编程方式使用(即不使用Interface Builder)。
我根据文档做了一切:
UICollectionViewLayout
并准备我的布局layoutAttributesForSupplementaryView(ofKind elementKind: String, at indexPath: IndexPath)
并返回相应的布局属性collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath)
实施我的问题是collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath)
和layoutAttributesForSupplementaryView(ofKind elementKind: String, at indexPath: IndexPath)
都没有被调用,所以我看不到我的补充意见。
我已经仔细检查了我的实现,包括布局和补充视图创建,但我仍然无法使其工作。
答案 0 :(得分:4)
显然,让layoutAttributesForSupplementaryView(ofKind elementKind: String, at indexPath: IndexPath) -> UICollectionViewLayoutAttributes?
返回补充视图的属性是不够的。
还需要在layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes?
我的错误是我只返回layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes?
一旦我将补充视图的布局属性添加到layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes?
返回的值中,我就调用了数据源方法并返回了补充视图。
编辑:这个答案涵盖了iOS10 SDK。我没有试过早期版本
答案 1 :(得分:0)
可接受的答案很好,但是一些示例代码会有所帮助:
override func layoutAttributesForSupplementaryView(ofKind elementKind: String, at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
let layoutAttributes = UICollectionViewLayoutAttributes(forSupplementaryViewOfKind: elementKind, with: indexPath)
if elementKind == UICollectionView.elementKindSectionHeader {
layoutAttributes.frame = CGRect(x: 0.0, y: 0.0, width: contentWidth, height: headerHeight)
layoutAttributes.zIndex = Int.max - 3
}
return layoutAttributes
}