写点什么

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

评论

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

资本市场发展趋势学习笔记

JiangX

28天写作

收购环信、因Clubhouse股价飙升30%,

ToB行业头条

带你了解TCP/IP,UDP,Socket之间关系

赖猫

socket udp TCP/IP

官宣 | Atlassian 针对中国市场推出适用于所有团队的本地化部署方案!

Atlassian

项目管理 DevOps 敏捷 Atlassian Jira

深入理解JVM中的类加载机制

Simon郎

JVM

混合云的五个优势

混合云

5 个最值得注意的开源集中式日志管理工具

程序员石磊

Linux 日志 性能监控 日志监控

基于Segment Routing技术构建新一代骨干网:智能、可靠、可调度(一)

UCloud技术

云计算 网络 云网络

解读|2020年CNCF云原生调研报告

焱融科技

容器 云原生 存储 cncf

C/C++后台开发需要点亮哪些技能树||(鹅厂为例) Linux百里

赖猫

c++ Linux 后台开发 linux开发 服务器开发

SpringBoot 接口幂等性的实现

xcbeyond

Spring Boot Java、 幂等性 28天写作

LeetCode题解:69. x 的平方根,牛顿迭代法+递归,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

拆散的乐高怎么装起来

李小腾

webpack | 进阶用法4:如何进行构建速度和体积分析

梁龙先森

大前端 webpack 28天写作 2月春节不断更

android开发手册apk!Android开发者跳槽指南终获offer

欢喜学安卓

android 程序员 面试 移动开发

硬盘的秘密

yes

机械硬盘

【盘点2020】连续8个月霸榜,年度最佳公有云竟然是它?

博睿数据

大厂面试算法到底有多重要?学会这份算法宝典,随便暴打头条面试官!

Java架构之路

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

非科班Java面试快手三面,如果不是疫情,offer已经到手了

Java架构之路

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

基于Segment Routing技术构建新一代骨干网:智能、可靠、可调度(二)

UCloud技术

云计算 运维 云网络

全面提升企业的主动防御能力,UCloud全新架构云安全中心正式公测!

UCloud技术

网络安全 恶意解析 云安全 安全漏洞

DCache 分布式存储系统|Key-Value 缓存模块的创建与使用

TARS基金会

nosql 微服务 MySQL 高可用 分布式数据储存 TARS

android开发实战!面试的时候突然遇到答不上的问题怎么办?Android校招面试指南

欢喜学安卓

android 程序员 面试 移动开发

高并发高性能服务器是如何实现的?

赖猫

c++ 高并发 linux开发 服务器开发 多线程高并发

学习感恩

谷鱼

产品经理训练营-第三周作业

羽室

官宣|焱融科技完成1.2亿元A+轮融资

焱融科技

分布式 存储 焱融科技 企业融资 创业公司

备战金三银四,”吊打各厂面试官“ ,为你准备了这份堪称“神作”的Java面试宝典

Java架构之路

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

黄际洲获CCF优秀博士学位论文奖 搜索推荐技术创新成果显著

爱极客侠

Linux-Lab 入门:详细步骤分解

贾献华

Linux 嵌入式 Linux Kenel 开发板 boot

SpringCloud 从入门到精通17---Sentinel降级/热点规则

Felix

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