具有自我调整大小的单元格的 UICollectionViewFlowLayout 在 reloadData 后崩溃
Posted
技术标签:
【中文标题】具有自我调整大小的单元格的 UICollectionViewFlowLayout 在 reloadData 后崩溃【英文标题】:UICollectionViewFlowLayout with self sizing cells crash after reloadData 【发布时间】:2015-04-20 12:38:21 【问题描述】:我有一个自定义 UICollectionViewFlowLayout
与非零 estimatedItemSize
用于单元格。我在重新加载数据的 collectionView 中添加和删除单元格,有时当我尝试滚动到刚刚删除/添加的单元格时会崩溃。
使用回溯工具,我得到以下结果:
第 9 帧:0x0000000185c8385c CoreFoundation-[__NSArrayM objectAtIndex:] + 264 帧 #10: 0x000000018aeabb18 UIKit-[_UIFlowLayoutSection setSize:forItemAtIndexPath:] + 708 帧 #11: 0x000000018ae7cc5c UIKit-[UICollectionViewFlowLayout invalidationContextForPreferredLayoutAttributes:withOriginalAttributes:] + 156 帧 #12:0x000000018ae646c4 UIKit-[UICollectionView _checkForPreferredAttributesInView:originalAttributes:] + 212 框架 #13: 0x000000018a844968 UIKit-[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 776
我猜我的流布局可以缓存单元格。
更新: 我的问题出现在 ios 8.3 上,但不在以前的版本上,包括 8.2。
【问题讨论】:
【参考方案1】:不要使用具有非零estimatedItemSize
的自调整单元格。这是一个陷阱。
实现UICollectionViewDelegateFlowLayout
的方法collectionView(collectionView:collectionViewLayout:indexPath:)
,您可以通过在单元格的自定义实例上调用systemLayoutSizeFittingSize
来计算单元格的大小。
您可以在这个问题中找到更详细的信息:UICollectionView - dynamic cell height?
【讨论】:
正确的答案可能是“不要使用自动调整大小的单元格:)”以上是关于具有自我调整大小的单元格的 UICollectionViewFlowLayout 在 reloadData 后崩溃的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小
使用自我调整大小的单元格后,reloadData 不再起作用