本篇文章主要从【Masonry 使用】学习总结。
在「时间 & 知识 」有限内,总结的文章难免有「未全、不足 」的地方,还望各位好友指出,以提高文章质量。
目录:
- Masonry简明介绍
- 导入Masonry框架
- Masonry 常用API & 特性
1.基础API
2.4种设置常量的方法
3.简化前缀的宏定义 & 简写
4.更新约束和布局- Masonry常用方法
1.基本使用:设置内边距
2.简单动画:priority优先级
3.更新约束 mas_updateConstraints
4.重写约束 mas_remakeConstraints
5.比例使用 multipliedBy
6.大于等于和小于等于某个值的约束- Demo小样 重要的部分代码中都有相应的注解和文字打印,运行程序可以很直观的表现 Star

在「时间 & 知识 」有限内,总结的文章难免有「未全、不足 」的地方,还望各位好友指出,以提高文章质量@jianshu - 白开水ln。
Masonry简明介绍
Masonry是一个轻量级的布局框架,适用于iOS以及OS X。它用简洁的语法对官方的AutoLayout进行了封装。 Masonry有它自己的一套框架用来描述NSLayoutConstraints布局的DSL,提高了约束代码的简洁性与可读性。
导入Masonry框架
使用
Cocoapods来导入框架,在使用到该框架的文件中添加主头文件:#import <Masonry/Masonry.h>。使用直接拖拽的方式拉入框架文件夹,在使用到该框架的文件中添加主头文件:
#import "Masonry.h"。
Masonry 常用API & 特性
基础API
|
|
Constant:Masonry提供了4种设置constant的方法
|
|
注解:
insets: 用来设置left, right, top, bottom。接受MASEdgeInsets类型值sizeOffset: 用来设置width, height。接受CGSize类型的值centerOffset: 用来设置centerX, centerY。接受CGPoint类型的值offset: 可以用来设置所有的东西。接受CGFloat类型的值
简化前缀的宏定义 & 简写
|
|
注解:这两个宏如果想有效使用,必须要在添加Masonry头文件之前导入进去。
|
|
更新约束和布局
|
|
-
- (void)updateConstraintsIfNeeded调用此方法,如果有标记为需要重新布局的约束,则立即进行重新布局,内部会调用updateConstraints方法。- (void)updateConstraints重写此方法,内部实现自定义布局过程。- (BOOL)needsUpdateConstraints当前是否需要重新布局,内部会判断当前有没有被标记的约束。- (void)setNeedsUpdateConstraints标记需要进行重新布局。
关于UIView重新布局相关的API,主要用以下三个API:
- (void)setNeedsLayout标记为需要重新布局。- (void)layoutIfNeeded查看当前视图是否被标记需要重新布局,有则在内部调用layoutSubviews方法进行重新布局。- (void)layoutSubviews重写当前方法,在内部完成重新布局操作。
|
|
Masonry常用方法
基本使用:设置内边距
效果图往下看:创建一个View,左右上下空出10个像素
|
|

简单动画:priority优先级
效果图往下看:优先级约束一般放在一个控件约束的最后面
|
|
注解:
这里的三个View的宽度是根据约束自动推断设置的,对黄色的View设置了一个与红色View有关的priority(250)的优先级,
它同时有对蓝色View有个最高的优先级约束(make.left.mas_equalTo(self.blueView.mas_right).with.offset(40);)。
当点击屏幕是,我将蓝色View移除,此时第二优先级就是生效。

更新约束 mas_updateConstraints
效果图往下看:创建一个按钮,约束好它的位置(居中,宽高等于100且小于屏幕宽高值)。
每次点击一次这个按钮,其宽高将增大一定的倍数,最终其宽高等于屏幕宽高时将不再变化。
|
|

重写约束 mas_remakeConstraints
创建一个按钮,约束好其位置(与屏幕上左右的距离为0,与屏幕底部距离为350),点击按钮后全屏展现(即与屏幕底部距离为0)。
|
|
注解:
mas_remakeConstraints和mas_updateConstraints 的区别在于
前者重新对视图进行了约束(抛弃了之前的约束),后者是更新约束条件(保留未更新的约束),
如:这次更新了对 height 的约束,其他对X&Y以及宽的约束不变)。

比例使用 multipliedBy
使用multipliedBy必须是对同一个控件本身,如果修改成相对于其它控件会出导致Crash。
|
|

大于等于和小于等于某个值的约束

参考:http://www.jianshu.com/p/99c418cd11f7
期待
- 如果在阅读过程中遇到 error || new ideas,希望你能 messages 我,我会及时改正谢谢。
- 点击右上角的 喜欢 和 订阅Rss 按钮,可以收藏本仓库,并在 Demo 更新时收到邮件通知。