一 、UICollectionView cell 0间距问题
摘自:亻弋石马亻生
首先应该了解一下[[UIScreen mainScrenn] scale]
iPhone 4 之前的设备为1.0
iPhone 4 ~ iPhone 6s (除plus外) 的为2.0
iPhone 6 plus 和 iPhone 6s plus 的为3.0
对于iPhone 6 Plus之前的手机,pt和px的比例是1:2,而iPhone 6 Plus出来之后,这一比例达到了1:3,
还是不太明白的话可以谷歌一下,这里有篇扩展阅读: 「像素」「渲染像素」以及「物理像素」是什么东西?它们有什么联系?
造成缝隙的原因
iPhone6的屏幕像素(point,也叫逻辑像素)是375667,物理像素为7501334,等分4份的话每一个item的宽度是375/4=93.75,这里是没有问题的,问题是屏幕能分的最小物理像素是1,而iPhone6的[[UIScreen mainScrenn] scale]是2.0,也就是说1个屏幕像素(逻辑像素)对应有2个物理像素,即0.5个屏幕像素对应1个物理像素,而iPhone6四等分的宽度是93.75,根据前面的分析有0.25是不可再分的,这就是造成缝隙的原因。 同理iPhone6 Plus的[[UIScreen mainScrenn] scale]是3.0,也就是说1个屏幕像素(逻辑像素)对应有3个物理像素,即0.333333个屏幕像素对应1个物理像素,四等分之后是414/4=103.5,有0.16是不可再分的,也会有缝隙。 ###解决办法 思路:只要itemSize的width的小数点后的值等于1 / [UIScreen mainScreen].scale的值即可。
返回cell宽度计算如下:
/**
修复UICollectionViewCell存在的缝隙
@param width UICollectionView的width(注意传入宽度的要比UICollectionView的要小一点,不然UICollectionView会超出视图)
@param cellCount 每行cell数
@param space cell间隔
@return 返回cell宽度
*/
- (CGFloat)fixSlitWithCollectionWidth:(CGFloat)width cellCount:(CGFloat)cellCount space:(CGFloat)space {
// round 如果参数是小数 则求本身的四舍五入.
// ceil 如果参数是小数 则求最小的整数但不小于本身.
// floor 如果参数是小数 则求最大的整数但不大于本身.
// round(3.4) --- 3 ceil(3.4) --- 4 floor(3.4) --- 3
//
// round(3.5) --- 4 ceil(3.5) --- 4 floor(3.5) --- 3
CGFloat totalSpace = (cellCount - 1) * space;//总共留出的距离
CGFloat itemWidth = (width - totalSpace) / cellCount;// 按照真实屏幕算出的cell宽度 (iPhone6 375*667)93.75
CGFloat realItemWidth = ceil(itemWidth);//取整加fixValue floor:如果参数是小数,则求最大的整数但不大于本身.
return realItemWidth; //每个cell的真实宽度
}
二、分割线问题
collectionView
不像tableview
一样可以设置分割线的所以需要自己绘制,直接在cell
里面设置两句代码就可以搞定啦
self.layer.borderColor=[UIColor blackColor].CGColor;
self.layer.borderWidth=0.5;
三、UITableView和UICollectionView的留白问题和被TabBar/NavigationBar遮挡的问题
UITableView
如果有留白和被TabBar
遮挡的问题时,大家可以加上下面两句
self.edgesForExtendedLayout = UIRectEdgeNone;
collectionView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIViewAutoresizingNone就是不自动调整。
UIViewAutoresizingFlexibleLeftMargin 自动调整与superView左边的距离,保证与superView右边的距离不变。
UIViewAutoresizingFlexibleRightMargin 自动调整与superView的右边距离,保证与superView左边的距离不变。
UIViewAutoresizingFlexibleTopMargin 自动调整与superView顶部的距离,保证与superView底部的距离不变。
UIViewAutoresizingFlexibleBottomMargin 自动调整与superView底部的距离,也就是说,与superView顶部的距离不变。
UIViewAutoresizingFlexibleWidth 自动调整自己的宽度,保证与superView左边和右边的距离不变。
UIViewAutoresizingFlexibleHeight 自动调整自己的高度,保证与superView顶部和底部的距离不变。
UIViewAutoresizingFlexibleLeftMargin |UIViewAutoresizingFlexibleRightMargin 自动调整与superView左边的距离,保证与左边的距离和右边的距离和原来距左边和右边的距离的比例不变。比如原来距离为20,30,调整后的距离应 为68,102,即68/20=102/30。
collectionView
是UICollectionView
的一个实例对象