5

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

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

让我们举个例子:

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

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

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

4

3 回答 3

2

好的,我发现有 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 将产生相同的解决方案,但 - 可以肯定 - 并不总是一个选项!

于 2013-02-19T14:45:48.970 回答
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);
}

这对我有用,所以我希望其他人觉得它有用!

于 2013-03-14T04:56:16.353 回答
0

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

于 2013-02-05T10:19:36.417 回答