美文网首页iOS常用小知识提升开发效率
ios CollectionView屏幕等分后出现间隙和排列错乱

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

作者: OCSwift | 来源:发表于2018-12-29 14:35 被阅读28次

    思路

    对于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屏幕等分后出现间隙和排列错乱

        本文链接:https://www.haomeiwen.com/subject/aqnulqtx.html