Сбой показывает вам явно, что не так:
UICollectionView должен быть инициализирован с помощью параметра макета, отличного от нуля.
blockquote>Если вы проверьте документацию Apple для
UICollectionView
, вы обнаружите, что единственным инициализатором являетсяinitWithFrame:collectionViewLayout:
. Кроме того, в параметрах для этого инициализатора вы увидите:frame
Прямоугольник рамки для представления коллекции, измеренный в точках , Происхождение кадра относится к супервину, в котором вы планируете его добавить. Этот кадр передается суперклассу во время инициализации.
layout
Объект макета, используемый для организации элементов. В представлении коллекции хранится сильная ссылка на указанный объект. Не должно быть nil.
blockquote>Я выделил важную часть. Вы должны использовать
initWithFrame:collectionViewLayout:
для инициализации вашегоUICollectionView
, и вы должны передать ему объект non-nilUICollectionViewLayout
.. Один из способов исправить это - просто изменить порядок инициализации:
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
. Если это не так, вставьте любой кадр, который вы хотите.