Masonry的使用

Masonry_下载地址
是什么?
Autolayout的第三方框架.
做什么用?
以简约的代码方式,对界面进行布局.
怎么用?

  1. 将源码导入到项目里面.
  • 一般第三方框架,都包含示例代码.也就是说,包含main.m文件.
    如果直接将整个文件夹,拖入项目中那么就会有冲突.会存在2个main.m文件
  • 所以仅需拖入源码即可.一般跟"框架"名称相同.
  • 删除有冲突的文件.


  1. 使用时包含主头文件(因为"主头文件-Masonry.h"里面会包含其他类)
    Masonry的使用_第1张图片
  2. 代码示例
    第一个示例: (约束,设置红色View的4边的内边距.)


    Masonry的使用_第2张图片
-(void)edges{
    UIView * redView = [[UIView alloc]init];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
    //万能公式: obj1.属性 = (obj2.属性 * 幂值) + 常量
//    //multipliedBy为1,可以不写
//    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
//        //redView的顶部 = (父控件.顶部*1)+20;
//        //redView的右边 = (父控件.右边*1)+-20;
//        make.top.equalTo(self.view.mas_top).multipliedBy(1).offset(20);
//        make.left.equalTo(self.view.mas_left).offset(20);
//        make.bottom.equalTo(self.view.mas_bottom).offset(-20);
//        make.right.equalTo(self.view.mas_right).offset(-20);
//    }];
    
//    //代码优化1:如果父控件的属性 = 当前view的属性,可以省略.
//    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.top.equalTo(self.view).offset(40);
//        make.left.equalTo(self.view).offset(40);
//        make.bottom.equalTo(self.view).offset(-40);
//        make.right.equalTo(self.view).offset(-40);
//    }];
    
//    //代码优化2:当前View参照的为父控件,则父控件可以省略.
//    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.top.offset(80);
//        make.left.offset(80);
//        make.bottom.offset(-80);
//        make.right.offset(-80);
//    }];
    
//    //代码优化3:当多边间距为同个constant时,可以用and来连接.
//    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.top.and.left.offset(80);
//        make.bottom.and.right.offset(-80);
//    }];
    
//    //代码优化4:其实可以直接省略and.
//    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.top.left.offset(80);
//        make.bottom.right.offset(-80);
//    }];
    
//    //代码优化4:使用内边距的方式,指定对应的constant.
//    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.edges.mas_equalTo(self.view).insets(UIEdgeInsetsMake(40, 80, 40, 80));
//    }];
    
    //代码优化5:使用内边距的方式,如果参照对象当前控件的view,则可以省略
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.insets(UIEdgeInsetsMake(40, 80, 20, 80));
    }];
}

第2个示例: (约束,红色View中心点垂直&水平居中,且固定红色View的宽和高)


Masonry的使用_第3张图片
-(void)center{
    UIView * redView = [[UIView alloc]init];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
    
//    添加约束    
//    make,这里指的是redView.
//    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.centerX.equalTo(self.view.mas_centerX);
//        make.centerY.equalTo(self.view.mas_centerY);
//        make.width.equalTo(@100);
//        make.height.equalTo(@100);
//    }];
    
//    //代码优化1: equalTo(@100)更改为mas_equalTo(200);
//    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.centerX.equalTo(self.view.mas_centerX);
//        make.centerY.equalTo(self.view.mas_centerY);
//        make.width.mas_equalTo(200);
//        make.height.mas_equalTo(200);
//    }];
    
    //代码优化2: 中心点水平垂直方向居中,固定redView的大小为300.
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.mas_equalTo(self.view);
        make.size.mas_equalTo(300);
    }];
}

第3个示例:

  1. 蓝色view和红色view等宽等高.
  2. 蓝色view距离左边,下边为30,距离红色view的间距为30.
  3. 红色view距离右边,下边为30.
  4. 红色view高度40.
-(void)test{
    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
    
    UIView *blueView = [[UIView alloc] init];
    blueView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:blueView];
    
    [blueView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.offset(30);//左边间距30.
        //蓝色view.右边 = (redView.左边 *1) + -30;
        make.right.equalTo(redView.mas_left).offset(-30);
        make.bottom.offset(-30);
        //蓝色view.宽度 == 红色viewd.宽度
        make.width.equalTo(redView.mas_width);
        make.height.equalTo(redView.mas_height);
    }];
    
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.right.offset(-30);
        make.height.mas_equalTo(40);//红色view的高度 = 40;
//        //顶部对齐+底部对齐 = 等高
//        //make.height.equalTo(redView.mas_height);
//        make.top.equalTo(blueView.mas_top);//顶部对齐
//        make.bottom.equalTo(blueView.mas_bottom);//底部对齐
    }];  
}

//更新约束
 //updateConstraints会更新之前存在的约束,如果没有,会添加新的约束
 [redView mas_updateConstraints:^(MASConstraintMaker *make) {
 make.height.equalTo(@80);
 }];
 
 // 删除之前所有的约束,添加新的约束
 [redView mas_remakeConstraints:^(MASConstraintMaker *make) {
 make.size.mas_equalTo(100);
 make.center.mas_equalTo(self.view);
 }];

#define MAS_SHORTHAND // 可以省略前缀'mas_'
#define MAS_SHORTHAND_GLOBALS //可以让equalTo()跟mas_equalTo()一样,将基本类型转换为对象.

MAS_SHORTHAND

Masonry的使用_第4张图片

MAS_SHORTHAND_GLOBALS

Masonry的使用_第5张图片


你可能感兴趣的:(Masonry的使用)