我有一个自定义UICollectionViewFlowLayout
,其中包含非零estimatedItemSize
个单元格。我在collectionView中添加和删除单元格重新加载数据,当我尝试滚动到刚删除/添加的单元格时,有时会出现崩溃。
使用backtrace工具,我得到以下结果:
第9帧:0x0000000185c8385c CoreFoundation - [__ NSArrayM objectAtIndex:] + 264 frame#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。
答案 0 :(得分:3)
不要使用非零estimatedItemSize
的自我调整单元格。这是一个陷阱。
实施UICollectionViewDelegateFlowLayout
方法collectionView(collectionView:collectionViewLayout:indexPath:)
,您可以通过在单元格的自定义实例上调用systemLayoutSizeFittingSize
来计算单元格的大小。
您可以在此问题中找到更详细的信息:UICollectionView - dynamic cell height?