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:]: index 0 beyond bounds for empty array”

我不知道这可能是哪个数组,Google 也没有提供任何帮助。有任何想法吗?我一定是忘记连接什么东西了,但我找不到。

4

1 回答 1

5

我遇到了这个问题。在

[collectionView setCollectionViewLayout:flowLayout];

并使用 lldb 调试器控制台检查 collectionView 是否已经作为 collectionViewLayout 实例属性

(lldb) expr collectionView.collectionViewLayout

我猜这不是你所期望的 nil ,但实际上是一个 UICollectionViewFlowLayout 指针。很可能您已在界面构建器中将 Collection View 的 Layout 属性设置为“流动”。

无需实例化另一个流布局,只需使用已经存在的布局即可。

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

这为我解决了这个问题

于 2014-12-04T01:48:23.857 回答