Tamam, cevap hayır, UICollectionViewFlowLayout alt sınıflamadan bunu yapmanın bir yolu yok.
Ancak, alt sınıflara ayırmak, gelecekte bunu okuyan herkes için inanılmaz derecede kolaydır.
Önce alt sınıf çağrısını kurdum MyCollectionViewFlowLayout
ve ardından arayüz oluşturucuda koleksiyon görünümü düzenini Özel olarak değiştirdim ve akış düzeni alt sınıfımı seçtim.
Bunu bu şekilde yaptığınız için, IB'de öğe boyutlarını vb. Belirtemezsiniz, bu yüzden MyCollectionViewFlowLayout.m'de bu var ...
- (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);
}
Bu benim için tüm boyutları ve kaydırma yönünü ayarlar.
Sonra ...
- (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);
}
Bu, kaydırmanın sol kenarda 5,0 kenar boşluğu ile bitmesini sağlar.
Tüm yapmam gereken buydu. Akış düzenini kodda ayarlamama hiç gerek yoktu.