2016-10-04 10 views
0

フッター補助ビューを持つUICollectionViewがあります。 collectionViewの動作は、新しいセルが挿入されたときに補助ビューをオフスクリーンにプッシュすることができます。セルは異なる水平サイジングを持つことができます。セルの挿入時にUICollectionViewがクラッシュする

2つの大きいセルが挿入され、補助ビューが画面から押し出された場合、2つの大きなセルの間に小さいセルを挿入するとクラッシュします。

*** 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であり、有効な応答がありません。

私の質問は2倍です:
1)私の補助ビューに関連付けられていない種類のviewForSupplementaryElementOfKindが呼び出されているのはなぜですか?私はUICollectionViewがこのメソッドから補足的なビュー情報を取得しようとするだけでよいことを期待しています。

2)どのようにしてこのクラッシュを回避できますか?

+0

あなたはどのビューからでも戻すことができますが、既にフッタービューを使用しているので、それを外してみてください – Misha

答えて

0

それは理由は不明であるが、このクラッシュは、メソッドに

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds 

をオーバーライドし、trueを返すだけでなく、挿入方法にあったinvalidateLayoutをへの呼び出しを削除することで解決しました。

関連する問題