写点什么

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:5215191

评论

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

Wireshark数据包分析学习笔记Day18

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

主流分布式文件系统总结

跳蚤

登陆用户身份获取

程序员架构进阶

架构设计 认证授权 28天写作 3月日更

Gradle无法访问Nexus私服仓库-offline

wjchenge

数据仓库设计

大数据技术指南

大数据 28天写作 3月日更

央行数字人民币“可控匿名”会侵犯隐私吗?最新解读来了

CECBC

数字货币

IO 模型

无心

Netty

用户故事拆分速查手册(译)

Bruce Talk

敏捷 译文 Agile User Story

线上问题的一点反思

风翱

复盘 3月日更 线上问题

树集合总结

我是程序员小贱

3月日更

谈兼职创业

Ryan Zheng

《青春有你3》的子弹时间舞台,凝筑了自由视角技术进化史

脑极体

How to Connect 2 Cisco Switches Together

心在飞

产品训练营第八周作业——用户路径地图

innovator琳

用户研究 用户地图 用户数据 用户模型

思呓(2)

型火🔥

学习 架构 分布式 解耦

mybatis 添加日志功能

xiezhr

mybatis 日志

《Redis 核心技术与实战》学习笔记 06

escray

redis 学习 28天写作 3月日更 Redis 核心技术与实战

寻找被遗忘的勇气(二十一)

Changing Lin

3月日更

产品0期-第九周

Jxin

在你所在的公司(行业、领域),正在用大数据处理哪些业务?可以用大数据实现哪些价值?

跳蚤

开源与商业产品

ES_her0

3月日更

深入剖析 | Java16语法特性

九叔(高翔龙)

Java 架构

一文搞定Diff算法

执鸢者

Vue 大前端 Diff

找到适合自己的睡眠方案

石云升

生活方式 28天写作 睡眠 3月日更

第11周课后练习-安全稳定

潘涛

架构师训练营 4 期

javax.imageio.IIOException: Unsupported Image Type

wjchenge

hive数据倾斜解决办法

五分钟学大数据

大数据 hive 28天写作 3月日更

从Nacos客户端视角来分析配置中心原理

麦洛

nacos SpringCloud Alibaba 动态配置

产品经理面试常见问题总结2

lenka

3月日更

传统IT部门为什么越来越不受欢迎?

boshi

数字化转型 IT职场 七日更

uni-app跨端开发H5、小程序、IOS、Android(五):uni-app数据绑定

黑马腾云

html5 微信小程序 uni-app iOS Developer 3月日更

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