내 앱에 UICollectionView
& 를 사용하는 태그 막대가 UICollectionViewFlowLayout
있으며 한 행의 셀이 가운데 정렬됩니다.
올바른 들여 쓰기를 얻으려면 모든 셀의 전체 너비 (간격 포함)를의 너비에서 빼고 UICollectionView
2로 나눕니다.
[........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;
// 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);
}