我使用了我的一些图像的集合视图。
每个图像应该在屏幕的尺寸来显示,因此一个单元具有在屏幕的宽度。 该minimumInterItemSpacing
的FlowLayout中的是25。所以,现在的问题是,如果我滚动,收集视图不滚动到下一个图像的开始,但对interItemSpacing的开始。
让我们来举个例子:
Image/Cell width = 320
CollectionView's interItemSpacing = 25
如果我滚动一页,滚动视图内容偏移是在320,而不是在345这意味着第二小区是不是在屏幕的中心。
如何解决这个问题? 有什么建议?
好吧,我已经找到了,现在还有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会导致相同的解决方案,但是 - 肯定的 - 并不总是一个选择!
你应该考虑iterItemSpacing还提供了单元格的宽度。 尽量提供cellWidth = 320-25 = 295。 它应该工作,然后。
我发现了一个解决的办法,这涉及继承的UICollectionViewFlowLayout。
我的CollectionViewCell大小是302 X 457和设置我的最小线间距为18(9pix针对每个小区)
当您从类扩展有需要将超过缠身的一些方法。 其中之一是
- (CGSize)collectionViewContentSize
在这种方法中,我需要添加了什么是在UICollectionView总宽度。 这包括([数据源计数] * widthOfCollectionViewCell)+([数据源计数] * 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);
}
这为我工作,所以我希望别人发现它有用!