Masonry:使用纯代码进行iOS应用的autolayout自适应布局

简介

简化iOS应用使用纯代码机型自适应布局的工作,使用一种简洁高效的语法替代NSLayoutConstraints.

快速入门

安装

使用 CocoaPods 安装

推荐在你的在 prefix.pch 中引入头文件:

 

使用

初始Masonry

这是使用MASConstraintMaker创建的约束:

甚至可以更短:

不止可以表达相等关系

.equalTo 等价于 NSLayoutRelationEqual

.lessThanOrEqualTo 等价于NSLayoutRelationLessThanOrEqual

.greaterThanOrEqualTo 等价于NSLayoutRelationGreaterThanOrEqual

这三个表达相等关系的语句,可以接受一个参数;此参数可以为以下任意一个:

1. MASViewAttribute

MASViewAttribute NSLayoutAttribute
view.mas_left NSLayoutAttributeLeft
view.mas_right NSLayoutAttributeRight
view.mas_top NSLayoutAttributeTop
view.mas_bottom NSLayoutAttributeBottom
view.mas_leading NSLayoutAttributeLeading
view.mas_trailing NSLayoutAttributeTrailing
view.mas_width NSLayoutAttributeWidth
view.mas_height NSLayoutAttributeHeight
view.mas_centerX NSLayoutAttributeCenterX
view.mas_centerY NSLayoutAttributeCenterY
view.mas_baseline NSLayoutAttributeBaseline

2. UIView/NSView

如果你需要 view.left 大于或等于label.left:

3. NSNumber

自适应布局允许将宽度或高度设置为固定值.
如果你想要给视图一个最小或最大值,你可以这样:

但是自适应布局不支持将 left,right, centerY等设为固定值.
如果你给这些属性传递一个常量, Masonry会自动将它们转换为相对于其父视图的相对值:

除了使用 NSNumber 外,你可以使用基本数据类型或者结构体来创建约束:

4. NSArray

一个数组,里面可以混合是前述三种类型的任意几种:

约束的优先级

.priority 允许你指定一个精确的优先级,数值越大优先级越高.最高1000.

.priorityHigh 等价于 UILayoutPriorityDefaultHigh.优先级值为 750.

.priorityMedium 介于高优先级和低优先级之间,优先级值在 250~750之间.

.priorityLow 等价于 UILayoutPriorityDefaultLow, 优先级值为 250.

优先级可以在约束的尾部添加:

等比例自适应

.multipliedBy 允许你指定一个两个视图的某个属性等比例变化

item1.attribute1 = multiplier × item2.attribute2 + constant,此为约束的计算公式, .multipliedBy本质上是用来限定 multiplier

注意,因为编程中的坐标系从父视图左上顶点开始,所以指定基于父视图的left或者top的multiplier是没有意义的,因为父视图的left和top总为0.

如果你需要一个视图随着父视图的宽度和高度,位置自动变化,你应该同时指定 right,bottom,width,height与父视图对应属性的比例(基于某个尺寸下的相对位置计算出的比例),并且constant必须为0.

工具方法

Masonry提供了一些工具方法来进一步简化约束的创建.

edges 边界

size 尺寸

center 中心

你可以使用链式语法来增强代码可读性:

更新约束

有时,你需要修改已经存在的约束来实现动画效果或者移除/替换已有约束.
在 Masonry 中,有几种不同的更新视图约束的途径:

1. References 引用

你可以把 Masonry 语法返回的约束或约束数组,存储到一个局部变量或者类的属性中,以供后续操作某个约束.

2. mas_updateConstraints

如果你只是想添加新的约束,你可以使用便利方法mas_updateConstraints,不需要使用 mas_makeConstraints.mas_updateConstraints,不会移除已经存在的约束(即使新旧约束间相互冲突).

3. mas_remakeConstraints

mas_remakeConstraintsmas_updateConstraints相似,不同之处在于: mas_remakeConstraints 会先移除视图上已有的约束,再去创建新的约束.

开源地址:https://github.com/SnapKit/Masonry

3 13 收藏

资源整理者简介:yilufeng0

简介还没来得及写 :) 个人主页 · 贡献了28个资源 · 1


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer