【发布时间】:2016-06-24 04:31:48
【问题描述】:
标题是我得到的错误,我不知道为什么,但这里有一些信息,希望这里的人可以解释我。
我已对UICollectionViewFlowLayout 进行了子类化,因为这样可以节省我自己在prepareLayout 中计算单元格的帧(也许这是一个问题?)。然后我使用UICollectionViewLayoutAttributes 信息计算覆盖它的补充视图,得到我想要的布局。
我使用performBatchUpdates:completion: 来添加、删除和更新视图。插入工作正常,但删除项目时出现标题中显示的错误。
所以我知道为什么会发生错误,但我不知道为什么会发生。举例说明导致问题的场景
- 从 1 个项目和 1 个补充视图 1 个部分开始
- 再添加两个项目(
prepareLayout看到 3 个项目和 3 个补充视图) - 删除项目(
prepareLayout看到 2 个视图和 2 个补充视图) -
layoutAttributesForSupplementaryViewOfKind:atIndexPath:被称为请求具有 section:0 和 item:2 的索引路径的属性 - 崩溃,因为它要求第三个补充视图的属性,即使之前它调用了准备布局设置 2 个项目和 2 个补充视图
- 在无奈和绝望中举手
所以据我所知,有问题的功能是:
- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath
{
return self.layoutInfo[elementKind][indexPath];
}
这当然是由UICollectionView 的内部网络自动调用的,所以我不知道为什么它在那个索引路径上要求那个补充视图。
有人有什么想法吗?也许这就是我使用performBatchUpdates:completion: 的方式,但删除工作正常,直到添加补充视图。我可以根据需要提供更多代码/解释。
【问题讨论】:
标签: ios objective-c uicollectionview uicollectionviewlayout uicollectionreusableview