您需要子类UICollectionViewLayout化并覆盖该collectionViewContentSize方法。我进行了子类UICollectionViewFlowLayout化,因此我不必重新编写所有布局代码。
我正在构建一个 4x4 网格,所以我的方法如下所示:
- (CGSize)collectionViewContentSize
{
NSInteger itemCount = [self.collectionView numberOfItemsInSection:0];
NSInteger pages = ceil(itemCount / 16.0);
return CGSizeMake(320 * pages, self.collectionView.frame.size.height);
}
旁注,当您使用自定义布局时,您将无法在 Interface Builder 中设置某些显示属性。您可以在init自定义 UICollectionViewLayout 子类的方法中以编程方式设置它们。这是我的参考:
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
self.itemSize = CGSizeMake(65.0f, 65.0f);
self.minimumLineSpacing = 15;
self.sectionInset = UIEdgeInsetsMake(7.5f, 7.5f, 30.0f, 7.5f);
[self setScrollDirection:UICollectionViewScrollDirectionHorizontal];
}