UICollectionView: must be initialized with a non-nil layout parameter
i got the same problem and mine got solved by using
UICollectionViewFlowLayout *myLayout = [[UICollectionViewFlowLayout alloc]init];
[myLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[myLayout setMinimumInteritemSpacing:0.0f];
[myLayout setMinimumLineSpacing:0.0f];
UICollectionView *myCollectionView = [[UICollectionView alloc]initWithFrame:viewfame collectionViewLayout:myLayout];
instead of
UICollectionView *myCollectionView = [[UICollectionView alloc]initWithFrame:self.view.frame];
[myLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[myLayout setMinimumInteritemSpacing:0.0f];
[myLayout setMinimumLineSpacing:0.0f];
[myCollectionView setCollectionViewLayout:myLayout];
This worked for me :
UICollectionViewFlowLayout *aFlowLayout = [[UICollectionViewFlowLayout alloc] init];
[aFlowLayout setItemSize:CGSizeMake(200, 140)];
[aFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
myCollectionViewController = [[MyCollectionViewController alloc]initWithCollectionViewLayout:flowLayout];
If you are creating UICollectionView programmatically a layout is required.
As it turns out the problem was with registerClass:
. I had this:
[self.collectionView registerClass:[UICollectionView class]
forCellWithReuseIdentifier:@"MyCell"];
but it should have been this:
[self.collectionView registerClass:[UICollectionViewCell class]
forCellWithReuseIdentifier:@"MyCell"];
So the dequeue method was creating a UICollectionView
instead of a UICollectionViewCell
.
If you are making collection view controller programmatically in UICollectionViewController make sure that UICollectionViewController init method uses [super initWithCollectionViewLayout] instead of [super init], e.g.:
-(id) initWithImages:(NSArray *)pImages {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
[layout setMinimumInteritemSpacing:0.0f];
[layout setMinimumLineSpacing:0.0f];
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
if (self = [super initWithCollectionViewLayout:layout]) {
_images= [[NSArray alloc] initWithArray:pImages];
}
return self;
}
From: UICollectionViewController Class Reference:Overview