ios CollectionView屏幕等分后出现间隙和排列错乱解决

思路

对于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的真实宽度
}

参考文章https://www.jianshu.com/p/01cadd95604d

你可能感兴趣的:(ios CollectionView屏幕等分后出现间隙和排列错乱解决)