UICollectionView在单元格插入时崩溃

时间:2016-10-04 17:19:43

标签: ios uicollectionview uicollectionreusableview

我有一个带有页脚补充视图的UICollectionView。 collectionView的工作方式,可以在插入新单元格时将补充视图推送到屏幕外。细胞可以具有不同的水平尺寸。

如果插入了两个大单元并且补充视图被推离屏幕,则在两个较大单元之间插入一个小单元会导致崩溃。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'the view returned from -collectionView:viewForSupplementaryElementOfKind:
atIndexPath (UICollectionElementKindCell,<NSIndexPath: 0xc00000000000000e> 
{length = 1, path = 0}) was not retrieved by calling 
-dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: or is nil ((null))'

我已确定发生崩溃是因为补充视图为零。它是零,因为在

 - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView 
   viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath

我检查一下该方法的元素类型。当应用程序崩溃时,类型是UICollectionElementKindCell,我没有有效的响应。

所以,我的问题是双重的:
1)为什么使用与我的补充视图无关的类调用viewForSupplementaryElementOfKind?我希望UICollectionView只能尝试从这个方法中获取补充视图信息。

2)如何避免这种崩溃?

1 个答案:

答案 0 :(得分:0)

目前还不清楚为什么,但是这个崩溃是通过覆盖方法来解决的

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds

并返回true并删除对插入方法中的invalidateLayout的调用。