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); }
这对我有用,所以我希望别人觉得它有用!