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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容