美文网首页
iOS masonry九宫格 单行 多行布局

iOS masonry九宫格 单行 多行布局

作者: 林希品 | 来源:发表于2022-06-14 14:43 被阅读0次
//九宫格布局单行
-(void)layoutOneLine{
    //单行布局 不需要考虑换行的问题
    CGFloatmarginX =10;  //按钮距离左边和右边的距离
    CGFloatmarginY =10;  //按钮距离布局顶部的距
    CGFloattoTop =50;  //布局区域距离顶部的距离
    CGFloatgap =10;    //按钮与按钮之间的距离
    NSIntegercol =5;    //这里只布局5列
    NSIntegercount =5;  //这里先设置布局5个按钮
    CGFloat viewWidth = self.view.bounds.size.width;  //视图的宽度
    CGFloat viewHeight = self.view.bounds.size.height;  //视图的高度
    CGFloatitemWidth = (viewWidth - marginX *2- (col -1)*gap)/col*1.0f;  //根据列数 和 按钮之间的间距 这些参数基本可以确定要平铺的按钮的宽度
    CGFloatheight = itemWidth;  //按钮的高度可以根据情况设定 这里设置为相等
    UIButton*last =nil;  //上一个按钮
    //准备工作完毕 既可以开始布局了
    for(inti =0; i < count; i++) {
        UIButton*item = [selfbuttonCreat];
        [item setTitle:@(i).stringValue forState:UIControlStateNormal];
        [self.viewaddSubview:item];
        //布局
        [itemmas_makeConstraints:^(MASConstraintMaker*make) {
            //宽高是固定的,前面已经算好了
            make.width.mas_equalTo(itemWidth);
            make.height.mas_equalTo(height);
            //topTop距离顶部的距离,单行不用考虑太多,多行,还需要计算距离顶部的距离
            make.top.mas_offset(toTop+marginY);
            if(!last) {  //last为nil 说明是第一个按钮
                make.left.mas_offset(marginX);
            }else{
                //第二个或者后面的按钮 距离前一个按钮右边的距离都是gap个单位
                make.left.mas_equalTo(last.mas_right).mas_offset(gap);
            }
        }];
        last = item;
    }
}
    //九宫格布局多行 其实跟单行布局差不多,唯一要注意的是要判断换行的问题  为了体现差异,把两种单独写 代码确实有大量重复的
    //多行布局是支持单行的
-(void)layoutMultiLine{
    //多行布局 要考虑换行的问题
    CGFloatmarginX =10;  //按钮距离左边和右边的距离
    CGFloatmarginY =1;  //距离上下边缘距离
    CGFloattoTop =200;  //按钮距离顶部的距离
    CGFloatgapX =10;    //左右按钮之间的距离
    CGFloatgapY =10;    //上下按钮之间的距离
    NSIntegercol =5;    //这里只布局5列
    NSIntegercount =13;  //这里先设置布局任意个按钮
    CGFloat viewWidth = self.view.bounds.size.width;  //视图的宽度
    CGFloat viewHeight = self.view.bounds.size.height;  //视图的高度
    CGFloatitemWidth = (viewWidth - marginX *2- (col -1)*gapX)/col*1.0f;  //根据列数 和 按钮之间的间距 这些参数基本可以确定要平铺的按钮的宽度
    CGFloatitemHeight = itemWidth;  //按钮的高度可以根据情况设定 这里设置为相等
    UIButton*last =nil;  //上一个按钮
    //准备工作完毕 既可以开始布局了
    for(int i =0; i < count; i++) {
        UIButton*item = [selfbuttonCreat];
        [itemsetTitle:@(i).stringValue forState:UIControlStateNormal];
        [self.viewaddSubview:item];
        //布局
        [itemmas_makeConstraints:^(MASConstraintMaker*make) {
            //宽高是固定的,前面已经算好了
            make.width.mas_equalTo(itemWidth);
            make.height.mas_equalTo(itemHeight);
            //topTop距离顶部的距离,单行不用考虑太多,多行,还需要计算距离顶部的距离
            //计算距离顶部的距离 --- 根据换行
            CGFloattop = toTop + marginY + (i/col)*(itemHeight+gapY);
            make.top.mas_offset(top);
            if (!last || (i%col) == 0) {  //last为nil  或者(i%col) == 0 说明换行了 每行的第一个确定它距离左边边缘的距离
                make.left.mas_offset(marginX);
            }else{
                //第二个或者后面的按钮 距离前一个按钮右边的距离都是gap个单位
                make.left.mas_equalTo(last.mas_right).mas_offset(gapX);
            }
        }];
        last = item;
    }
}

内容转发于https://www.jianshu.com/p/8f7a47435e4f

相关文章

  • iOS masonry九宫格 单行 多行布局

    iOS masonry九宫格 单行 多行布局 Masonry是个好东西,在当前尺寸各异的iOS开发适配中发挥着至关...

  • iOS masonry九宫格 单行 多行布局

    内容转发于https://www.jianshu.com/p/8f7a47435e4f[https://www.j...

  • OC_九宫格布局工具

    实现基于: iOS Masonry九宫格布局 - 一行代码实现九宫格 demo点这里 以后你可能会这样布局九宫格 ...

  • 适配

    Masonry iOS自动布局框架-Masonry详解

  • iOS 常用布局方式之Masonry

    级别: ★☆☆☆☆标签:「iOS Masonry」「iOS 自动布局」「Masonry」作者: Xs·H审校: ...

  • App架构方方面面

    布局 揭秘 iOS 布局 Masonry源码解析 自动布局&绝对布局autolayoutautolayout 动画...

  • Third Party

    A:推荐使用 B:修改使用 C:参考使用 自动布局Masonry(A)iOS自动布局框架-Masonry详解SDA...

  • masonry 源码解读

    ios 手写布局的几种方式 Frame AutoLayout VFL Masonry ios 布局的几种方式 1....

  • Masonry分析

    iOS 源代码分析----Masonry Masonry是OC自动布局的框架,简化了AutoLayout的写法。 ...

  • Autolayout布局九宫格

    Autolayout纯代码布局九宫格 单行固定间隔排列: 水平布局设置 垂直布局设置 固定宽度设置: 水平布局 垂...

网友评论

      本文标题:iOS masonry九宫格 单行 多行布局

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