我通过代码添加了UICollectionView
现在,应用程序崩溃并显示消息:UICollectionView must be initialized with a non-nil layout parameter
您有解决的主意吗?
CollectionCellUICollectionViewCell的自定义类。

@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/

10-14 23:45