UICollectoin查看水平卷轴与项目间距

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

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

我们来举个例子:

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

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

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

好的,我发现,有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将导致相同的解决scheme,但是 – 当然 – 并不总是一个选项!

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

我find了一个解决scheme,它涉及到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); } 

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