Masonry自动布局详解一:基本用法
2015-11-30 16:26
330 查看
Masonry自动布局详解一:基本用法
说到iOS自动布局,有很多的解决办法。有的人使用
xib/storyboard自动布局,也有人使用
frame来适配。对于前者,笔者并不喜欢,也不支持。对于后者,更是麻烦,到处计算高度、宽度等,千万大量代码的冗余,对维护和开发的效率都很低。
笔者在这里介绍纯代码自动布局的第三方库:
Masonry。这个库使用率相当高,在全世界都有大量的开发者在使用,其
star数量也是相当高的。
支持原创,请阅读原文
效果图
本节详解Masonry的基本用法,先看看效果图:
我们这里要布局使这三个控件的高度一致,而绿色和红色的控件高度和宽度相待。
核心代码
看下代码:- (void)viewDidLoad { [super viewDidLoad]; UIView *greenView = UIView.new; greenView.backgroundColor = UIColor.greenColor; greenView.layer.borderColor = UIColor.blackColor.CGColor; greenView.layer.borderWidth = 2; [self.view addSubview:greenView]; UIView *redView = UIView.new; redView.backgroundColor = UIColor.redColor; redView.layer.borderColor = UIColor.blackColor.CGColor; redView.layer.borderWidth = 2; [self.view addSubview:redView]; UIView *blueView = UIView.new; blueView.backgroundColor = UIColor.blueColor; blueView.layer.borderColor = UIColor.blackColor.CGColor; blueView.layer.borderWidth = 2; [self.view addSubview:blueView]; // 使这三个控件等高 CGFloat padding = 10; [greenView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(padding); make.left.mas_equalTo(padding); make.right.mas_equalTo(redView.mas_left).offset(-padding); make.bottom.mas_equalTo(blueView.mas_top).offset(-padding); // 三个控件等高 make.height.mas_equalTo(@[redView, blueView]); // 红、绿这两个控件等高 make.width.mas_equalTo(redView); }]; [redView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.height.bottom.mas_equalTo(greenView); make.right.mas_equalTo(-padding); make.left.mas_equalTo(greenView.mas_right).offset(padding); }]; [blueView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(greenView); make.bottom.mas_equalTo(-padding); make.left.mas_equalTo(padding); make.right.mas_equalTo(-padding); }]; }
讲解
添加约束的方法是:mas_makeConstraints。我们可以看到,约束可以使用链式方式,使用方法很简单,看起来像一句话。
看这句话:
make.top.height.bottom.mas_equalTo(greenView),意思是:使我的顶部、高度和底部都与
greenView的顶部、高度和底部相等。因此,只要
greenView的约束添加好了,那么
redView的顶部、高度和底部也就自动计算出来了。
大多时候,我们并不会将一句话完整地写出来,而是使用简写的方式。如:
make.right.mas_equalTo(-padding);
其完整写法为:
make.right.mas_equalTo(bludView.superView.mas_right).offset(-padding);
当我们是要与父控件相对约束时,可以省略掉父视图。注意,并不是什么时候都可以省略,只有约束是同样的才可以省略。比如,约束都是
right才可以。如果是一个
left一个是
right,那么就不能省略了。
源代码
大家可以到笔者的github下载源代码:https://github.com/CoderJackyHuang/MasonryDemo
温馨提示:本节所讲内容对应于
BasicController中的内容
关注我
微信公众号:iOSDevShares有问必答QQ群:324400294
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- SQLserver删除某数据库中所有表实现思路
- SQLite 入门教程三 好多约束 Constraints
- MySQL学习笔记4:完整性约束限制字段
- mysql创建Bitmap_Join_Indexes中的约束与索引
- jQuery.lazyload+masonry改良图片瀑布流代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- sql server建库、建表、建约束技巧
- SQL Server创建数据库和数据表的相关约束实现方法