Masonry适配的简单使用

一.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适配的简单使用)