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的尺寸