好的,答案是否定的,没有子类化 UICollectionViewFlowLayout 就没有办法做到这一点。
但是,对于将来阅读本文的任何人来说,对其进行子类化都非常容易。
首先我设置了子类调用MyCollectionViewFlowLayout
,然后在界面生成器中我将集合视图布局更改为自定义并选择了我的流布局子类。
因为您这样做是因为您无法在 IB 中指定项目大小等...所以在 MyCollectionViewFlowLayout.m 我有这个...
- (void)awakeFromNib
{
self.itemSize = CGSizeMake(75.0, 75.0);
self.minimumInteritemSpacing = 10.0;
self.minimumLineSpacing = 10.0;
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.sectionInset = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0);
}
这为我设置了所有尺寸和滚动方向。
然后 ...
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
{
CGFloat offsetAdjustment = MAXFLOAT;
CGFloat horizontalOffset = proposedContentOffset.x + 5;
CGRect targetRect = CGRectMake(proposedContentOffset.x, 0, self.collectionView.bounds.size.width, self.collectionView.bounds.size.height);
NSArray *array = [super layoutAttributesForElementsInRect:targetRect];
for (UICollectionViewLayoutAttributes *layoutAttributes in array) {
CGFloat itemOffset = layoutAttributes.frame.origin.x;
if (ABS(itemOffset - horizontalOffset) < ABS(offsetAdjustment)) {
offsetAdjustment = itemOffset - horizontalOffset;
}
}
return CGPointMake(proposedContentOffset.x + offsetAdjustment, proposedContentOffset.y);
}
这确保了滚动在左侧边缘以 5.0 的边距结束。
这就是我需要做的。我根本不需要在代码中设置流布局。