我通过代码添加了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;
}
发布于 2014-06-18 15:45:30
坠机事件非常清楚地告诉你出了什么问题:
必须使用非零布局参数初始化UICollectionView。
如果您检查UICollectionView
,您会发现唯一的初始化程序是initWithFrame:collectionViewLayout:
。此外,在初始化器的参数中,您将看到:
框架 集合视图的框架矩形,以点数为单位。框架的起源相对于您计划在其中添加它的超级视图。此框架在初始化期间传递给超类。 布局 用于组织项的布局对象。集合视图存储对指定对象的强引用。绝不能是零。
我用粗体表示了的重要部分。您必须使用initWithFrame:collectionViewLayout:
来初始化您的UICollectionView
,并且必须传递给它一个非零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
的框架。如果不是这样的话,插入任何你想要的帧。
发布于 2016-12-01 04:40:36
SWIFT3.0和SWIFT4.0
UICollectionView
当UICollectionView
初始化时,应用程序一启动就崩溃了。
初始化如下(viewDidLoad
上)
let alarmCollectionView:UICollectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: UICollectionViewFlowLayout.init())
let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout.init()
方法(在viewDidLoad
中)
layout.scrollDirection = UICollectionViewScrollDirection.vertical
alarmCollectionView.setCollectionViewLayout(layout, animated: true)
alarmCollectionView.delegate = self
alarmCollectionView.dataSource = self
alarmCollectionView.backgroundColor = UIColor.clear
self.addSubview(alarmCollectionView)
像这样初始化后工作得很好,我使用的是Autolayout,所以使用CGRect.zero
或者使用您自己的CGRect
UICollectionViewController
如果您使用的是UICollectionViewController
而不是UICollectionView
,则需要在初始化时添加布局。
let testNavController:UINavigationController = UINavigationController.init()
let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout.init()
let collectionView:UICollectionViewController = UICollectionViewController.init(collectionViewLayout:layout )
testNavController.pushViewController(collectionView, animated: true)
发布于 2016-02-14 11:00:07
这是Riley Avron的快速回答。
let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSizeMake(100, 100)
let collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)
self.view.addSubview(collectionView)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "cellIdentifier")
https://stackoverflow.com/questions/24288927
复制相似问题