如何在分页启用时扩展UICollectionView contentSize?

LE *_*ANG 27 uiscrollview ios uicollectionview

UICollectionView启用分页机制我做的很简单,一切正常.但是,当滚动到最后一页时,屏幕中的单元格数量不完全可见,最后一页包含上一页面的一些单元格.

如何扩大contentSizeUICollectionView,这样最后一页不包含前一页的任何细胞?

这里的一个例子:UICollectionView水平滚动6个单元格,这样:

第1页: cell0 - cell1 - cell2 - cell3

滚动:cell2-cell3-cell4-cell5 //不期望:如何更改为:cell4 - 第2页中的单元格5.

摘要:

我想设置

collectionView.contentSize = numberOfPage * collectionView.frame

collectionView.contentSize = numberOfCell * (cellFrame + spacing)

rea*_*eth 35

您需要子类化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);
}
Run Code Online (Sandbox Code Playgroud)

旁注,当您使用自定义布局时,您将无法在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];
}
Run Code Online (Sandbox Code Playgroud)