我正在使用某些图像的集合视图。
每个图像都应以屏幕大小显示,因此一个单元格具有屏幕宽度。 flowLayout的minimumInterItemSpacing
为25。
所以现在的问题是,如果我正在滚动,集合视图不会滚动到下一个图像的开头,而是滚动到interItemSpacing的开头。
我们举个例子:
Image/Cell width = 320
CollectionView's interItemSpacing = 25
如果我滚动一页,滚动视图内容偏移量为320而不是345,表示第二个单元格不在屏幕中心。
如何解决这个问题?有什么建议?
答案 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)
当你从那个类扩展时,有一些方法需要被覆盖。其中之一是
在这个方法中,我需要加上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);
}
这对我有用,所以我希望别人觉得它很有用!