美文网首页
Masonry适配的简单使用

Masonry适配的简单使用

作者: 小小小Lucky | 来源:发表于2019-07-23 14:16 被阅读0次

    一.Masonry是什么:

    答:是一个很好的三方,用来做适配的

    Masonry是ios中用代码实现自动布局的一个框架,使用起来特别方便,主要有mas_makeConstraints(添加约束),mas_updateConstraints(更新约束),mas_remakeConstraints(移除约束要谨慎,防止view的fram缺东西)3个方法。

    二.怎么使用Masonry

    1.导入框架:a.直接拷贝过去 b.用cocospod:pod 'Masonry', '~> 1.0.1'

    2.导入头文件

    #define MAS_SHORTHAND

    #define MAS_SHORTHAND_GLOBALS//加上这两个宏就不需要考虑父控件了

    #import "Masonry.h"

    使用技巧:引入下面2个宏,就不需要加mas_前缀了。

    //define this constant if you want touse Masonrywithout the'mas_' prefix

    #define MAS_SHORTHAND

    //define this constant if you want to enable auto-boxing for default syntax

    #define MAS_SHORTHAND_GLOBALS

    Shorthand(12月7日新增)

    在写代码的时候,可能你会感觉有的东西要加mas_前缀,有的东西又不用加,代码风格不统一,而且加mas_前缀还麻烦。

    前面介绍过加mas_前缀主要是在扩展系统类的时候为了避免与原有类冲突,这是Apple推荐的做法。不过目前来说,即使不加mas_前缀,也不会有什么问题。所以Masonry提供了不加mas_前缀的方法,只需要你定义几个宏即可。

    MAS_SHORTHAND

    定义MAS_SHORTHAND宏之后。可以使用UIView,NSArray中不带mas_前缀的makeConstraints,updateConstraints,remakeConstraints。以及UIView中不带mas_前缀的Attribute。

    MAS_SHORTHAND_GLOBALS

    默认的equalTo方法只接受id类型的对象。有时候我们想传入一个CGFloat, CGSize, UIEdgeInsets等。还需要将其转化成NSValue对象,比较麻烦。Masonry也考虑到了这种情况。只需要定义MAS_SHORTHAND_GLOBALS宏。就可以直接对equalTo传入基础类型。Masonry自动转化成NSValue对象

    3.添加约束

     [confirmPayment mas_makeConstraints:^(MASConstraintMaker *make) {

    }];

    三.举例说明

    1.基本使用(一个控件的布局)

      __weak typeof (self) weakSelf = self;//防止循环使用

     [confirmPayment mas_makeConstraints:^(MASConstraintMaker *make) {

        make.top.equalTo(weakSelf.view).with.offset(10);//距离上面10px

        make.left.equalTo(weakSelf.view).with.offset(10);//距离左边10px

        make.bottom.equalTo(weakSelf.view).with.offset(-10);//距离下边10px

        make.right.equalTo(weakSelf.view).with.offset(-10); //距离右边10px

        make.center.equalTo(weakSelf.view);//位于该父视图的中心

        make.size.mas_equalTo(CGSizeMake(150, 60));//设置这个控件的大小

        make.edges.mas_offset(UIEdgeInsetsMake(100, 10, 100, 10));//距离上左下右各为10px

     }];

    当导入宏

    #define MAS_SHORTHAND

    #define MAS_SHORTHAND_GLOBALS//加上这两个宏就不需要考虑父控件了

    make.top.equalTo(weakSelf.view).with.offset(10);//距离上面10px

    等同于

    make.top.equalTo(10)//距离上面10px

    2.多个控件(兄弟控件的布局)

           UIView *view2 = [[UILabel alloc]init];

            view2.backgroundColor = [UIColor yellowColor];

            [self.view addSubview:view2];

            [view2 mas_makeConstraints:^(MASConstraintMaker *make) {

                    make.size.mas_equalTo(CGSizeMake(100, 100));

                    make.centerX.equalTo(view1);//view2跟view1的中心X对齐

                    make.top.equalTo(view1.mas_bottom).with.offset(20);//view2距离view1的下面10px

                }];

    3 让一个蓝色view的内边距为50,点击屏幕后内边距变为100,具体实现如下(2中写法):

    [blueView mas_makeConstraints:^(MASConstraintMaker *make) {

            第一种写法

     make.left.top.equalTo(self.view).offset(20);

    make.bottom.right.equalTo(self.view).offset(-20);

     第二种写法

    make.edges.insets(UIEdgeInsetsMake(50, 50, 50, 50));

        }];

     点击屏幕后更新约束代码如下:

    [blueView mas_updateConstraints:^(MASConstraintMaker *make) {

            第一种写法

    make.top.left.equalTo(self.view).offset(100);

    make.bottom.right.equalTo(self.view).offset(-100);

     第二种写法

    make.edges.insets(UIEdgeInsetsMake(100, 100, 100, 100));

        }];

    4   蓝色view距离顶端100,距离左右各20,高度50,黑色view和蓝色view右端对其,黑色view顶端距离蓝色view底端20,并且宽度是蓝色view的一半,截图和代码如下(相对于父控件的约束可以省略):

    [blueView mas_makeConstraints:^(MASConstraintMaker *make) {

    make.top.offset(100);

    make.left.offset(20);

    make.right.offset(-20);

    make.height.offset(50);

        }];

    [blankView mas_makeConstraints:^(MASConstraintMaker *make) {

    make.right.equalTo(blueView);

    make.height.equalTo(blueView);

    make.top.equalTo(blueView.mas_bottom).offset(10);

    make.width.equalTo(blueView).multipliedBy(0.5);

        }];

    相关文章

      网友评论

          本文标题:Masonry适配的简单使用

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