ठीक है, उत्तर नहीं है, 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 के मार्जिन के साथ समाप्त होता है।
मुझे बस इतना ही करना है। मुझे कोड में फ्लो लेआउट सेट करने की आवश्यकता नहीं थी।