写点什么

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

评论

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

Apache Oozie基本原理与工作流类型

大数据技术指南

大数据 oozie 4月日更

树莓派简介

IT蜗壳-Tango

IT蜗壳教学 4月日更

关于Object,你所必须知道的!

Chalk

大前端 Object 4月日更

升级dubbo,小心default.version

捉虫大师

Java dubbo

时代之盾,国之重器:华为带给政务数据保护的新可能

脑极体

新基建:“区块链+物联网”,是否生活将会改变?

电微13828808271

物联网 区块链标准

Linux chmod命令

一个大红包

4月日更

Java一套拳法刷掉n个遍历树的问题 John 易筋 ARTS 打卡 Week 43

John(易筋)

ARTS活动

找到适合您的数字化转型策略的3个步骤

龙归科技

数字化转型 企业

Golang channel 模型

花一个无所

源码分析 模型 Go 语言 简易架构图

睿象云智能告警平台cloudalert排班可以帮你做什么

睿象云

运维 告警 运维人生 智能告警 告警管理

Golang Map 模型

花一个无所

模型 源码剖析 Go 语言 简易架构图

Kafka 零拷贝模型

花一个无所

kafka 模型 简易架构图

javascript

wudaxue

JavaScript

Redis split-brain 脑裂

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

2021字节大厂面经分享:Java面试高分宝典!GitHub已标星86.7K

比伯

Java 编程 架构 面试 计算机

人生好走的路那么多,你偏要选这条难走的走

小天同学

自我思考 个人感悟 人生修炼 4月日更

【得物技术】前端工程师要知道的Nginx知识

得物技术

nginx 负载均衡 大前端 得物技术 知识

手写函数

wudaxue

JavaScript vue.js

大数据计算生态之数据存储

小舰

4月日更

架构实战营 - 模块1 - 作业

Ming

软件架构

Golang map 模型

花一个无所

源码分析 模型 Go 语言 简易架构图

Golang interface 模型

花一个无所

源码分析 模型 Go 语言 简易架构图

云计算防火墙对象(组)的实践

Python研究所

云计算 防火墙 对象组

聪明人的训练(二)

Changing Lin

4月日更

Tidb模型

花一个无所

架构 TiDB 简易架构图

dubbo几个问题整理:优雅停机、线程池配置

程序员架构进阶

dubbo 28天写作 4月日更 优雅停机 线程配置

不想写代码偷懒之配置化

顿晓

大前端 配置化开发 4月日更

Python OpenCV 之图像乘除与像素的逻辑运算,图像处理取经之旅第 17 天

梦想橡皮擦

Python OpenCV 4月日更

新版犀牛书该不该入手?

清秋

JavaScript ecmascript ES6 技术书籍 4月日更

头条二面:你们公司怎么处理MySQL的 Binlog 日志?

Java架构师迁哥

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