UICollectionView的cell间距问题

来源:互联网 发布:genesis软件 编辑:程序博客网 时间:2024/05/17 23:45

UICollectionView的cell间距问题

cell的间距是有三个因素共同调整的
  • cell的最小间距 minimumInteritemSpacing
  • cell的大小 [flowLayout setItemSize:]
  • cell的内边距 flowLayout.sectionInset

假设:
CollectionView宽度:CollectionWidth,
一个Cell宽度:CellWidth,
cell的内边距 UIEdgeInsetsMake(top, left, bottom, right);
一行cell的个数:N,
cell的间距:SpaceX,
cell的最小间距:MinimumX

公式如下
SpaceX = (CollectionWidth - CellWidth * N - left - right)/(N-1);
CellWidth = (CollectionWidth - (left + right + SpaceX*(N-1)))/N;

当 SpaceX >= CellWidth时,N会递增,也就是说一行的cell数量会增多。
当SpaceX < MinimumX时(所以minimumInteritemSpacing要设置的小于等于你想要的间距),cell就会进行换行,所以N会取允许范围内的最大值。
由此可见,对于某一个固定了宽度的CollectionView,cell的间距只是由cell的宽度决定的。

eg:

要求:
+ CollectionView的宽度是屏幕宽度 ScreenWidth
+ Cell的左右内边距分别是5
flowLayout.sectionInset = UIEdgeInsetsMake(3, 5, 3, 5);
+ Cell之间的间距为六 flowLayout.minimumInteritemSpacing =6;

见下图
这里写图片描述

那么此时cell的宽度设置多少刚好呢?
由于:
CellWidth = (CollectionWidth - (left + right + SpaceX*(N-1)))/N;
所以:
CellWidth = (ScreenWidth -(5+5 + 6*1) )/ 2. ;

即只需按照CellWidth正确设置Cell的尺寸既可以按照要求设置间距:

[flowLayout setItemSize:CGSizeMake(width, width * 410/300.)]; //设置cell的尺寸
0 0