我通过代码添加了UICollectionView
。
现在,应用程序崩溃并显示消息:UICollectionView must be initialized with a non-nil layout parameter
。
您有解决的主意吗?CollectionCell
是UICollectionViewCell
的自定义类。
@property (nonatomic, strong) UICollectionView* collectionView;
- (void)viewDidLoad
{
[super viewDidLoad];
self.collectionView = [[UICollectionView alloc]init];
[self.collectionView registerClass:[CollectionCell class] forCellWithReuseIdentifier:@"cell"];
UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.itemSize = CGSizeMake(100, 100);
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self.collectionView setCollectionViewLayout:flowLayout];
self.collectionView.frame = CGRectMake(0, 60, 320, 500);
self.collectionView.backgroundColor = [UIColor whiteColor];
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
[self.view addSubview:self.eventCollection];
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 20;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CollectionCell* cell = [self.eventCollection dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.label.text = [NSString stringWithFormat:@"%d", indexPath.item];
return cell;
}
最佳答案
崩溃清楚地告诉您出了什么问题:
必须使用非nil布局参数初始化UICollectionView。
如果选中the documentation for UICollectionView
,则会发现唯一的初始化程序是initWithFrame:collectionViewLayout:
。此外,在该初始化程序的参数中,您将看到:
帧
集合视图的框架矩形,以点为单位。框架的原点与您计划在其中添加的超级视图有关。该帧在初始化期间传递给超类。
布局
用于组织项目的布局对象。集合视图存储对指定对象的强引用。不能为零。
我已经加粗了重要部分。您必须使用initWithFrame:collectionViewLayout:
初始化UICollectionView
,并且必须向其传递非nil UICollectionViewLayout
对象。
解决此问题的一种方法就是简单地更改初始化的顺序:
UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.itemSize = CGSizeMake(100, 100);
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:flowLayout];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
请注意,在上面的示例中,我假设您要使用
self.view.frame
作为self.collectionView
的框架。如果不是这种情况,请插入所需的任何框架。关于ios - UICollectionView:必须使用非nil布局参数初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48408619/