在Apple文档中此UICollectionView
guide的流布局部分的“指定项目和行之间的空间”下,我们阅读:
在布局期间,流布局对象将项目添加到当前行,直到剩余空间不足以容纳整个项目。如果该行足够大以容纳整数个项目而没有多余的空间,则项目之间的空间将等于最小间距。 如果行尾有多余的空间,则布局对象会增大项目间的间距,直到项目均匀地适合行边界为止,如图3-3所示。增大间距会改善整体效果外观,并防止每行末尾出现大间隙。
(重点是我的)
但这似乎不是事实。从iOS 12.4和iOS 13 beta 7开始,如果您使用未填充可用宽度的小单元格制作垂直滚动的集合视图,则项目间的间距不会从最小值扩展为填充宽度。参见此示例,其中两个节各有5个项目,每节20pt x 20pt,最小项目间距,最小行间距和节插入均为4 pt:
文档过时了吗?还是我做的事情很奇怪?这是一个示例应用程序,它仅包含一个集合视图,该集合视图的委托/数据源使用仅具有背景色的香草UICollectionViewCells
,并实现上述尺寸调整方法,而没有其他用途。
代码:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];
}
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 2;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 5;
}
-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor lightGrayColor];
return cell;
}
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(20, 20);
}
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
return UIEdgeInsetsMake(4, 4, 4, 4);
}
-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 4;
}
-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
return 4;
}