在reloadData之后,自定义单元格的UICollectionViewFlowLayout崩溃

时间:2015-04-20 12:38:22

标签: crash autolayout uicollectionview

我有一个自定义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。

1 个答案:

答案 0 :(得分:3)

不要使用非零estimatedItemSize的自我调整单元格。这是一个陷阱。

实施UICollectionViewDelegateFlowLayout方法collectionView(collectionView:collectionViewLayout:indexPath:),您可以通过在单元格的自定义实例上调用systemLayoutSizeFittingSize来计算单元格的大小。

您可以在此问题中找到更详细的信息:UICollectionView - dynamic cell height?