1

UICollectionView にセクション フッターを追加しようとしていますが、理解できない方法で失敗しています。

私はこのようにメインセルを設定しています:

[collectionView registerClass:[PickerOpenCell class] forCellWithReuseIdentifier:cellIdentifier];
UINib *cellNib = [UINib nibWithNibName:@"PickerOpenCell" bundle:nil];
[collectionView registerNib:cellNib forCellWithReuseIdentifier:cellIdentifier];

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
flowLayout.itemSize = CGSizeMake(130, 50);

[collectionView setCollectionViewLayout:flowLayout];

xib は UICollectionViewCell のサブクラスであり、UILabel だけを含んでいます。これはすべてうまくいきます。

ここで、セクション フッターを追加したいので、これを追加します (上記のコードとインターリーブされるため、setCollectionViewLayout 呼び出しはシーケンスの最後の呼び出しのままです)。

[collectionView registerClass:[PickerOpenFooter class] forCellWithReuseIdentifier:footerIdentifier];

UINib *footerNib = [UINib nibWithNibName:@"PickerOpenFooter" bundle:nil];
[collectionView registerNib:footerNib forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footerIdentifier];

flowLayout.footerReferenceSize = CGSizeMake(130, 2);

今回の xib は UICollectionReusableView のサブクラスであり、ビューが含まれています (セクション間の水平の白い線を意味します)。ビューのサイズは 130 x 2 です。

footerReferenceSize 行を追加した瞬間、setCollectionViewLayoutLine でアプリがクラッシュします。

キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: '-[__NSArrayM objectAtIndex:]: インデックス 0 が空の配列の境界を超えています'

これがどの配列であるかはわかりませんが、Google は何の助けも提供していません。何か案は?何かを接続するのを忘れたに違いないのですが、見つかりません。

4

1 に答える 1

5

私はこの問題を抱えていました。にブレークポイントを設定します

[collectionView setCollectionViewLayout:flowLayout];

また、lldb デバッガー コンソールを使用して、collectionView が既に collectionViewLayout インスタンス プロパティとして存在するかどうかを確認します。

(lldb) expr collectionView.collectionViewLayout

これは、ご想像のとおり nil ではなく、実際には UICollectionViewFlowLayout ポインターであると推測しています。ほとんどの場合、インターフェイス ビルダーでコレクション ビューの Layout 属性を "flow" に設定しています。

別のフロー レイアウトをインスタンス化する代わりに、既に存在するものを使用します。

UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout*) collectionView.collectionViewLayout;

これで問題が解決しました

于 2014-12-04T01:48:23.857 に答える