写点什么

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

评论

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

TypeScript 之常见类型(下)

冴羽

JavaScript typescript 翻译 大前端

模块五作业

panxiaochun

架构实战营

自定义规则删除过期文件(linux)

liuzhen007

28天写作 12月日更

趣谈“分布式链路追踪“组件发展史

悟空聊架构

分布式 链路追踪 28天写作 悟空聊架构 12月日更

记录:一个从0-1打磨演讲的技术专家

将军-技术演讲力教练

如何掌握智识?

卢卡多多

28天写作 12月日更

微博系统中”微博评论“的高性能高可用计算架构

Geek_cb2b43

前端架构师神技,三招统一代码风格

杨成功

大前端 架构师 代码规范 代码格式化 签约计划第二季

模块五作业

心怀架构

架构实战-模块五

唐敏

「架构实战营」

1.《重学JAVA》开篇

杨鹏Geek

Java Java 25 周年 28天写作 12月日更

邀请函|2021 云原生实战峰会,邀请您免费现场参会报名

阿里巴巴云原生

阿里云 云原生 峰会

linux之cp强制复制文件

入门小站

Linux

基于云的技术架构设计实践-第1篇

hackstoic

云计算 容器 云原生 CI/CD 签约计划第二季

如何构建“深入浅出,喜闻乐见”的界面

Ian哥

28天写作 沟通界面 深入浅出 喜闻乐见

[Pulsar] 设置JWT认证

Zike Yang

Apache Pulsar 12月日更

还在担心流量防护问题?Sentinel来帮你!

XiaoLin_Java

SpringCloud Alibaba 流量防控 签约计划第二季

架构实战营第五课作业微博评论高性能高可用架构

Geek_99eefd

架构实战营 「架构实战营」

Rust 元宇宙 12 —— 序列化和存储

Miracle

rust 元宇宙

在线火星文转换器工具

入门小站

工具

模块5作业

Asha

聊聊SAAS

Im胡子

SaaS

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

lucian

架构实战营

微博系统中”微博评论“的高性能高可用计算架构设计

stars

架构训练营

互联网公司如何塑造一支有创业精神的技术团队?

阿里巴巴中间件

创业 阿里云 中间件

模块五作业

侠客行

架构实战营 「架构实战营」

ASP.NET Core中三个egg疼的路由函数

喵叔

28天写作 12月日更

Dubbo-Admin 正式支持 3.0 服务治理

阿里巴巴中间件

阿里云 云原生 dubbo 中间件 服务治理

x

Nydia

微博评论的高性能高可用架构设计

zjluoyue

模块五作业

小鹿

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