思路
对于iPhone 6 Plus之前的手机,pt和px的比例是1:2,而iPhone 6 Plus出来之后,这一比例达到了1:3,
举例:一个collectionView宽度是屏幕宽度 四等分
eg:6s 375 / 4 = 93.75
eg:6P 414 / 4 = 103.5
eg:6s 0.5个point 是1像素 多余025构不成一个像素
eg:6P 1 / 3个point是1像素 多余0.166构不成一个像素
只要是整数后面的小数是(1 / [UIScreen mainScreen].scale)就行
代码
- (CGFloat)fixSlitWith:(CGRect)rect colCount:(CGFloat)colCount space:(CGFloat)space {
CGFloat totalSpace = (colCount - 1) * space;//总间隙
//每个item的宽度
CGFloat itemWidth = (rect.size.width - totalSpace) / colCount;
CGFloat fixValue = 1 / [UIScreen mainScreen].scale;
CGFloat realItemWidth = floor(itemWidth) + fixValue;//取整加fixValue floor:如果参数是小数,则求最大的整数但不大于本身.
CGFloat realWidth = colCount * realItemWidth + totalSpace;
//算出屏幕等分后满足1px=([UIScreen mainScreen].scale)pt实际的宽度,可能会超出屏幕,需要调整一下frame
CGFloat pointX = (realWidth - rect.size.width) / 2; //偏移距离
if (pointX > 0) {
rect.origin.x += pointX;//向左偏移
}else{
rect.origin.x -= pointX;//向左偏移
}
rect.size.width = realWidth;
self.collectionView.frame = rect;
[self.collectionView setNeedsLayout];
return realItemWidth; //每个cell的真实宽度
}
网友评论