关闭

Masonry框架基本使用方法

标签: iOSMasonry屏幕适配自动布局
188人阅读 评论(0) 收藏 举报
分类:
  • iPhone-iPhone3GS:window的size固定为(320,480),我们只需要简单计算一下相对位置就好。

  • iPhone4-iPhone4S:苹果推出了retina屏,但是对于开发人员并没有改变太多,window的size同样没有变化。

  • iPhone5-iPhone5S:window的size变为(320,568),苹果推出了autoresizingMask适配屏幕。

  • iPhone6至今:window的width也发生了变化,autoresizingMask不能更好的适配各种各样的屏幕尺寸,随之苹果推出了autolayout来支持复杂的适配。

我们平时总是在xib或storyboard里轻松的添加控件的约束,但是使用代码添加约束是一件非常痛苦的事情。虽然苹果推出了VFL语言简化了代码添加约束的复杂性,但是随之而来的缺点也暴露出来:约束内容使用字符串在编写过程中容易出错,约束功能局限,而且也并不是简化了太多。

Masonry是目前最流行的AutoLayout框架,属于轻量级布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了,具有更高的可读性。可以方便快捷的使用代码添加控件的约束,下面简单介绍一下这个三方框架的使用方法:

配置

  • 点击该链接 https://github.com/SnapKit/Masonry.git 下载

  • 将Masonry文件包拖入项目中,删除包内自带的info.plist文件

  • demo中对Masonry的引用在.pch文件中

  • 使用Masonry不需要设置约束控件的translatesAutoresizingMaskIntoConstraints属性

简单实现

1.约束控件大小为100x100、位置为父控件的中心点

[blueView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.size.mas_equalTo(CGSizeMake(100, 100));
    make.center.mas_equalTo(self.view);
}];

也可以分别约束控件的宽和高、中心点的位置

[blueView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.width.mas_equalTo(100);
    make.height.mas_equalTo(100);
    make.centerX.mas_equalTo(self.view);
    make.centerY.mas_equalTo(self.view);
}];

2.约束控件的大小为父控件的一半、约束控件在父控件的右上角,距离父控件右边和顶部均为20

[blueView mas_makeConstraints:^(MASConstraintMaker *make) {        
    make.size.mas_equalTo(self.view).multipliedBy(0.5);
    make.right.mas_equalTo(self.view.mas_right).with.offset(-20);
    make.top.mas_equalTo(self.view.mas_top).with.offset(20);
}];

3.约束控件距离父控件四周距离均为50

[blueView mas_makeConstraints:^(MASConstraintMaker *make) {    
    make.left.mas_equalTo(self.view).offset(50);
    make.right.mas_equalTo(self.view).offset(-50);
    make.top.mas_equalTo(self.view).offset(50);
    make.bottom.mas_equalTo(self.view).offset(-50);
}];

可以简化为

[blueView mas_makeConstraints:^(MASConstraintMaker *make) {    
    make.edges.mas_equalTo(self.view).insets(UIEdgeInsetsMake(50, 50, 50, 50));
}];

4.两个控件互相约束

[blueView mas_makeConstraints:^(MASConstraintMaker *make) {        
    make.left.mas_equalTo(self.view.mas_left).offset(20);
    make.right.mas_equalTo(redView.mas_left).offset(-20);
    make.bottom.mas_equalTo(self.view.mas_bottom).offset(-20);
    make.height.mas_equalTo(50);
}];

[redView mas_makeConstraints:^(MASConstraintMaker *make) {        
    make.right.mas_equalTo(self.view.mas_right).offset(-20);
    make.bottom.mas_equalTo(blueView.mas_bottom);
    make.height.mas_equalTo(blueView.mas_height);
    make.width.mas_equalTo(blueView.mas_width);
}];

总结

  • 约束的类型:

    • 尺寸:width、height、size
    • 边界:left、leading、right、training、top、bottom
    • 中心点:center、centerX、centerY
    • 边界:deges
  • mas_equalTo 和 equalTo 区别

    • mas_equalTo 对参数进行包装
    • equalTo 不会对参数进行包装
  • mas_width 和 width 区别

    • width是make对象的一个属性,对宽度进行约束
    • mas_width是一个属性值,当做mas_equalTo的参数,表示某个控件的宽度属性
  • with和and仅仅是为了提高可读性,可有可无

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4037次
    • 积分:233
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论