UICollectionView水平滚动与项间距

时间:2013-02-01 17:08:45

标签: iphone ios ipad uicollectionview

我正在使用某些图像的集合视图。

每个图像都应以屏幕大小显示,因此一个单元格具有屏幕宽度。 flowLayout的minimumInterItemSpacing为25。 所以现在的问题是,如果我正在滚动,集合视图不会滚动到下一个图像的开头,而是滚动到interItemSpacing的开头。

我们举个例子:

Image/Cell width = 320
CollectionView's interItemSpacing = 25

如果我滚动一页,滚动视图内容偏移量为320而不是345,表示第二个单元格不在屏幕中心。

如何解决这个问题?有什么建议?

3 个答案:

答案 0 :(得分:2)

好的,我发现的是,有两个选项可以实现正确的滚动。

1. UICollectionViewController size

通过准确添加interItemSpacing所需的值来增加集合视图及其项目的大小。

以下是一些代码:

- (void) setupCollectionView;
{
    PSTCollectionViewFlowLayout *flowLayout = [[PSTCollectionViewFlowLayout alloc] init];
    CGSize itemSize = self.view.bounds.size;
    itemSize.width +=25;
    [flowLayout setItemSize:itemSize];
    [flowLayout setScrollDirection:PSTCollectionViewScrollDirectionHorizontal];
    flowLayout.minimumInteritemSpacing = 0.0f;
    flowLayout.minimumLineSpacing = 0.0f;

    self.collectionView = [[PSTCollectionView alloc] initWithFrame:self.view.bounds
                                          collectionViewLayout:flowLayout];
    [self.collectionView registerClass:[AMDetailImageCell class]
        forCellWithReuseIdentifier:AMDetailImageCellIdentifier];
    self.collectionView.delegate = self;
    self.collectionView.dataSource = self;
    self.collectionView.pagingEnabled = YES;
    CGRect rectSize = self.view.bounds;
    rectSize.size.width +=25;
    self.collectionView.frame = rectSize;
    [self.view addSubview:self.collectionView];

    [self scrollToStartIndex];

}

2. SectionEdgeInset

制作一个页面=一个部分并使用sectionEdgeInset会产生相同的解决方案但是 - 当然 - 并不总是一个选项!

答案 1 :(得分:0)

您还应该通过考虑iterItemSpacing来提供单元格宽度。尝试提供cellWidth = 320-25 = 295。它应该工作。

答案 2 :(得分:0)

我找到了一个解决方案,它涉及子类化UICollectionViewFlowLayout。

我的CollectionViewCell大小为302 X 457,我将最小行间距设置为18(每个单元格为9pix)

当你从那个类扩展时,有一些方法需要被覆盖。其中之一是

  • (CGSize)collectionViewContentSize

在这个方法中,我需要加上UICollectionView中的总宽度。这包括([datasource count] * widthOfCollectionViewCell)+([datasource count] * 18)

这是我的自定义UICollectionViewFlowLayout方法....

-(id)init
{
    if((self = [super init])){

       self.itemSize = CGSizeMake(302, 457);
       self.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
       self.minimumInteritemSpacing = 0.0f;
       self.minimumLineSpacing = 18.0f;
       [self setScrollDirection:UICollectionViewScrollDirectionHorizontal];
   }
    return self;
}



-(CGSize)collectionViewContentSize{
   return CGSizeMake((numCellsCount * 302)+(numCellsCount * 18), 457);
}

这对我有用,所以我希望别人觉得它很有用!