IOS开发-Masonry

松和泰
2023-12-01

Masonry是一个封装苹果Autolayout的一个第三方框架。简化了代码添加约束的代码量等。
下载地址:
https://github.com/SnapKit/Masonry
下载完后解压缩,把Masonry这个文件夹拖进项目里就可以了。

下面是一个小小的实例:
先导入头文件:

#import "Masonry/Masonry.h"
    UIView *buleView = [[UIView alloc]init];
    [buleView setBackgroundColor:[UIColor blueColor]];
    [self.view addSubview:buleView];

    [buleView mas_makeConstraints:^(MASConstraintMaker *make) {
        //大小
        make.size.mas_equalTo(CGSizeMake(50, 50));
        //位置:居中
        make.center.mas_equalTo(self.view);
    }];

运行一下,在屏幕中央就有一个50*50的蓝色小方块了。

Masonry里面几个约束的方法:

    [buleView mas_makeConstraints:^(MASConstraintMaker *make) {
        //添加新约束
    }];
    [buleView mas_remakeConstraints:^(MASConstraintMaker *make) {
        //会把以前的约束删除掉,添加新的约束
    }];
    [buleView mas_updateConstraints:^(MASConstraintMaker *make) {
        //更新以前的约束
    }];

引用Masonry文档的一个例子:
效果是一个view距离父控件上下左右都有10的边距。官方列举了两种写法,第二种直接一句话就能实现效果。
第一种:

UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(superview.mas_top).with.offset(padding.top); //with is an optional semantic filler
    make.left.equalTo(superview.mas_left).with.offset(padding.left);
    make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);
    make.right.equalTo(superview.mas_right).with.offset(-padding.right);
}];

第二种:

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(superview).with.insets(padding);
}];

到这里我们会碰到很多mas_前缀和没有这个前缀的东西,他们两个的区别就是带mas_前缀的是有对参数进行封装的,例如:
mas_equalTo(100)
equalTo(@100)
没有mas_前缀的就需要转类型,反之则不用。
如果要使这两个的效果等同,那么Masonry提供了两个宏给我们使用,但是需要注意的是,定义这个宏的时候,要在导入Masonry头文件之前,例如:

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

//define this constant if you want to use Masonry without the 'mas_' prefix
#define MAS_SHORTHAND

#import "Masonry/Masonry.h"

这样就可以了。

 类似资料: