我正在寻找使用自动布局计算自定义 UICollectionViewLayout
中补充 View 大小的最佳方法.为了清楚起见,这是对我想要实现的目标的简化解释。
我有一个标题补充 View ACVHeaderView
具有自动布局约束。
在 prepareLayout:
我想计算节标题的大小并为其创建补充 View 布局属性。然后我想遍历该部分中的单元格,为单元格创建和存储布局属性。在“构建”布局后,这些属性将全部存储以由其他 Collection View 布局方法返回。
理想情况下,我想通过调用 collectionView:dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:
来调整标题的大小,执行自动布局传递,然后使用 view:systemLayoutSizeFittingSize:
.这正是我为单元本身所做的(遵循我从 WWDC 获得的一些示例代码)。
但是,此错误失败:
2014-09-04 18:51:53.852 ACV[7298:167827] *** Assertion failure in -[UICollectionViewData layoutAttributesForSupplementaryElementOfKind:atIndexPath:], /SourceCache/UIKit_Sim/UIKit-3302.3.1/UICollectionViewData.m:853
2014-09-04 18:51:53.916 ACV[7298:167827] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for layout attributes for supplementary view UICollectionElementKindSectionHeader in section 0 when there are only 0 sections in the collection view'
我理解我认为的问题......在我调整该部分中的任何单元格之前,我正在尝试使标题的补充 View 出队。这意味着我还没有为该部分中的任何单元格创建任何布局属性(使用
UICollectionViewLayoutAttributes.forCellWithIndexPath:
)。 UICollectionViewData
看起来像一个跟踪 UICollectionView
中的布局属性的内部类。并且它不允许我在至少一个单元格的布局属性之前使补充 View 出队。我想到了以下几点:
ACVHeaderView
的实例用于调整标题的大小。那会奏效,但在我的真实案例中,我有多个补充观点。必须保留我自己的补充类型记录并重用标识符和原型(prototype) View 字典似乎很不整洁。我将复制 Collection View 出队机制中使用的逻辑。 实现这一目标的最佳方法是什么?我想我一定遗漏了一些更直接的东西,因为 Apple 鼓励开发人员正确使用动态类型和自动布局。
最佳答案
部分中可能有一个包含 0 个单元格的部分,因此不会导致此问题。我认为问题在于您添加了标题的补充属性,但该部分不可用(numberOfSectionsInCollectionView 返回 0)。
我会确保
numberOfSectionsInCollectionView:
当您添加补充标题属性时,不返回 0。
关于ios - 在自定义 UICollectionViewLayout 中使用自动布局调整补充 View 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25672543/