1)为什么viewforsupplements yelementofkind被调用的类型与我的补充视图不相关?我希望UICollectionView应该只尝试从这个方法获取补充视图信息。
并返回true,同时删除插入方法中对invalidateLayout的调用
我有一个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))'
我已经确定发生崩溃是因为补充视图为nil。它是nil,因为在
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView
viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
检查传递给方法的元素类型。当应用程序崩溃时,类型是UICollectionElementKindCell,对此我没有有效的响应。
所以,我的问题是双重的:1)为什么viewforsupplements yelementofkind被调用的类型与我的补充视图不相关?我希望UICollectionView应该只尝试从这个方法获取补充视图信息。
2)如何避免这种崩溃?
原因尚不清楚,但通过重写
方法解决了此崩溃- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds