使用在XIB中创建的CollectionView的CollectionViewLayout?

时间:2014-07-24 12:40:07

标签: ios objective-c xcode uicollectionview uicollectionviewlayout

我有一个名为' ImageViewController.xib"的XIB;其中包含一个集合视图。我已经在xib内的这个集合视图上设置了我想要的集合视图布局。

尝试运行我的应用时,收到错误消息:

'UICollectionView must be initialized with a non-nil layout parameter'

我在ImageViewController中使用它:

-(id) initWithImages:(NSArray *)imagesUrls
{
    if (self = [super initWithCollectionViewLayout:self.collectionViewLayout]) { 
        self.imageUrls = [[NSArray alloc] initWithArray:imagesUrls];
    }

    [self.collectionView registerNib:[UINib nibWithNibName:@"ImageCell" bundle:nil] forCellWithReuseIdentifier:@"Cell"];
    return self;
}

我只想使用我在XIB中设置的布局而不是以编程方式创建一个。

2 个答案:

答案 0 :(得分:0)

您可以将collectionViewLayout添加到viewDidLoad中的collectionView。

创建collectionViewLayout,例如:

UICollectionViewFlowLayout * flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
flowLayout.minimumLineSpacing = 5;
flowLayout.minimumInteritemSpacing = 5;
flowLayout.sectionInset = UIEdgeInsetsMake(5, 5, 5, 5);

然后我们将其设置为collectionView

的流布局
_collectionView.collectionViewLayout = flowLayout;

我在一个很好的教程中找到了这个答案,可以找到here

希望这会有所帮助

答案 1 :(得分:-1)

尝试在您的视图中添加此功能。使用Load方法执行其操作以摆脱它

UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.itemSize = CGSizeMake(100, 100);
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"MyCell"];

这对我有用...你看到错误告诉你布局不应该是nil,Layout的框架是相对于它的superview设置的,布局在初始化期间传递给父类,检查你的CollectionViewLayout是否是“空”