写点什么

Masonry 与 iOS 自动布局

  • 2014-02-10
  • 本文字数:1013 字

    阅读完需:约 3 分钟

开源项目 Masonry 旨在让自动布局(Auto Layout)的代码更简洁、可读性更强。

Masonry ,“一个轻量级的布局框架,采用更优雅的语法封装自动布局”,不需要使用 XIB 和 Storyboard。它的创造者 Jonas Budelmann论证了尽管自动布局很强大,但它很快就变得冗长而不可读。

Masonry 是一种领域特定语言(DSL),为自动布局的所有功能提供便捷的方法,包括建立和修改约束、存取属性、设置优先级以及调试支持。

GitHub 上的示例代码展示了 Masonry 的典型用法及其简洁的语法

复制代码
UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);
{1}
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];

自动布局最重要的是约束:UI 元素间关系的数学表达式。约束包括尺寸、由优先级和阈值管理的相对位置。它们是添加剂,可能导致约束冲突、约束不足造成布局无法确定。这两种情况都会产生异常。

通过编程的方式,不使用Masonry,也可以创建约束:创建 NSLayoutConstraint , 关联到视图并指定属性和关系。Apple 也提供了 Visual Format Language ,它是另一种以文本方式描述关系的领域特定语言。

自动布局既不是强制的,也不是独有的方法。“springs and struts”仍然是一种有效的方法。“springs and struts”也就是 autoresizing masks ,决定了一个视图的父视图大小变化时,其自身如何变化。

Apple 提供了采用自动布局的令人信服的原因

  • “Springs and struts”模式需要编写代码来处理各种屏幕方向、尺寸和动态内容。
  • iOS 7 中的动态类型允许用户在应用中设置文字大小偏好。
  • 支持 iOS 6 和 iOS 7 以及它们不同的元素度量。

自动布局并非完美无缺。Apple 提供了一篇指南,以常用的UIScrollView 为例说明如何使用自动布局。Matt Newburg 在一篇回复中给出了充足的理由说明为什么“自动布局在视图转换时并不完美”。为了弥补这种不足,他建议更多地使用层转换。

任何类型的自动布局代码意味着你将无法获得Xcode5 提供的Interface Builder 增强功能的支持。特别是可视化地解决自动布局问题的功能,在assistant editor 的预览模式中查看各种屏幕方向、尺寸和iOS 系统版本下的运行时布局的功能。

原文英文链接: iOS Auto Layout with Masonry


感谢姚琪琳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-02-10 07:5215411

评论

发布
暂无评论
发现更多内容

真正牛逼的人,都是极简主义者!!

冰河

产品 程序 极简主义

面试学习!月薪20k+的Android面试都问些什么?终获offer

欢喜学安卓

android 程序员 面试 移动开发

批判性思维自修课(四)

石君

28天写作 批判性思维

mPaas上线应用检测

阿里云金融线TAM SRE专家服务团队

ios android RPC

LeetCode题解:433. 最小基因变化,BFS+生成所有可能新基因再匹配,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

《程序员修炼之道》- 务实的方法(5)

石云升

程序员 28天写作 评估工作量

传统线程互斥技术 synchronized

武哥聊编程

Java 多线程 synchronized 28天写作

半导体芯片小白基础知识(2) (28天写作 Day23/28)

mtfelix

集成电路 28天写作 晶圆 光刻机 晶圆代工

产品经理训练营笔记-产品思维和产品意识(下)

.nil?

产品经理训练营

《小狗钱钱》读书笔记

架构精进之路

读书笔记 七日更 28天写作

阿里内部Redis宝典意外流出极致经典:源码+实战+理论

比伯

Java 编程 程序员 架构 面试

贪心算法

en

算法 贪心算法

深入浅出Android!阿里P7深入Binder原理讲解,论程序员成长的正确姿势

欢喜学安卓

android 程序员 面试 移动开发

【Linux系统】关于守护进程

程序员架构进阶

Linux 架构 守护进程 28天写作

BAT面试Spring全家桶:Spring+SpringBoot+SpringCloud+SpringMVC

Java架构之路

Java 程序员 架构 面试 编程语言

成长篇-结构思考力笔记(完整版)

小诚信驿站

程序员 刘晓成 小诚信驿站 成长笔记 28天写作

开发质量提升系列:表字段名称引发的血案

罗小龙

代码规范 28天写作

Mybatis【16】-- Mybatis多对一关联查询

秦怀杂货店

数据库 mybatis

架构师训练营第 2 期 第 8 周 作业一

老腊肉

架构师训练营第2期

设计模式: 工厂模式

爱笑的小雨

设计模式 23种设计模式 Java设计模式

webpack | 谈谈webpack的本质

梁龙先森

大前端 webpack 28天写作

《破壁MySQL》 - MySQL索引

haxianhe

MySQL

CSS(九)——盒子的浮动与定位

程序员的时光

程序员 七日更 28天写作

阿里架构师集一生内力编撰的笔记,到底有什么干货?

Java架构师迁哥

故乡的年

熊斌

28天写作

“复制”马斯克(三):我们要为他的“反智事业”买单吗?

脑极体

Redis击穿、穿透、雪崩产生原因以及解决思路

Java架构师迁哥

设计模式简单讲 - 适配器设计模式

小马哥

Java 设计模式 架构师 七日更

NullPointerException 的处理新方式,Java14 真的太香了!

xcbeyond

Java java 14 新特性 28天写作

JVM笔记 -- Java跨平台和JVM跨语言

秦怀杂货店

JVM JVM笔记

学习JAVA8个月,成功跳槽,外包进阿里成功定级P7,太牛了!

Java 编程 程序员 面试

Masonry与iOS自动布局_移动_Scott McKenzie_InfoQ精选文章