मेरे ऐप में एक टैग बार है जो UICollectionView
& a का उपयोग करता हैUICollectionViewFlowLayout
, , जिसमें सेल की एक पंक्ति संरेखित है।
सही इंडेंट पाने के लिए, आप अपनी चौड़ाई से सभी सेल (रिक्ति सहित) की कुल चौड़ाई घटाते हैं UICollectionView
, और दो से विभाजित करते हैं।
[........Collection View.........]
[..Cell..][..Cell..]
[____indent___] / 2
=
[_____][..Cell..][..Cell..][_____]
समस्या यह है -
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
पहले कहा जाता है ...
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
... तो आप कुल चौड़ाई निर्धारित करने के लिए अपनी कोशिकाओं पर पुनरावृति नहीं कर सकते।
इसके बजाय आपको फिर से प्रत्येक सेल की चौड़ाई की गणना करने की आवश्यकता है, मेरे मामले में मैं उपयोग [NSString sizeWithFont: ... ]
करता हूं क्योंकि मेरे सेल की चौड़ाई यूआईबेल द्वारा ही निर्धारित की जाती है।
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
CGFloat rightEdge = 0;
CGFloat interItemSpacing = [(UICollectionViewFlowLayout*)collectionViewLayout minimumInteritemSpacing];
for(NSString * tag in _tags)
rightEdge += [tag sizeWithFont:[UIFont systemFontOfSize:14]].width+interItemSpacing;
// To center the inter spacing too
rightEdge -= interSpacing/2;
// Calculate the inset
CGFloat inset = collectionView.frame.size.width-rightEdge;
// Only center align if the inset is greater than 0
// That means that the total width of the cells is less than the width of the collection view and need to be aligned to the center.
// Otherwise let them align left with no indent.
if(inset > 0)
return UIEdgeInsetsMake(0, inset/2, 0, 0);
else
return UIEdgeInsetsMake(0, 0, 0, 0);
}