ฉันมีแถบแท็กในแอปของฉันซึ่งใช้เครื่องหมายUICollectionView
& 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: ... ]
เนื่องจากความกว้างของเซลล์ของฉันถูกกำหนดโดย UILabel เอง
- (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;
rightEdge -= interSpacing/2;
CGFloat inset = collectionView.frame.size.width-rightEdge;
if(inset > 0)
return UIEdgeInsetsMake(0, inset/2, 0, 0);
else
return UIEdgeInsetsMake(0, 0, 0, 0);
}