Oke, jawabannya tidak, tidak ada cara untuk melakukan ini tanpa subclass UICollectionViewFlowLayout.
Namun, membuat subclass sangat mudah bagi siapa saja yang membaca ini di masa mendatang.
Pertama saya mengatur panggilan subkelas MyCollectionViewFlowLayout
dan kemudian di pembuat antarmuka saya mengubah tata letak tampilan koleksi menjadi Kustom dan memilih subkelas tata letak aliran saya.
Karena Anda melakukannya dengan cara ini, Anda tidak dapat menentukan ukuran item, dll ... di IB jadi di MyCollectionViewFlowLayout.m saya punya ini ...
- (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);
}
Ini mengatur semua ukuran untuk saya dan arah gulir.
Kemudian ...
- (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);
}
Ini memastikan bahwa pengguliran berakhir dengan margin 5.0 di tepi kiri.
Hanya itu yang perlu saya lakukan. Saya tidak perlu mengatur tata letak aliran dalam kode sama sekali.