写点什么

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

评论

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

车载小程序快马加鞭突围车联网生态系统

FinClip

【Zeekr_Tech】初谈我们共同的目标 NPDS + Agile

Zeekr_Tech

人工智能 敏捷开发 智能驾驶

恒源云(Gpushare)_如何安装包/pip加速等?技巧大放送3!

恒源云

安装 pip Ubuntu apt

恒源云(Gpushare)_JupyterLab/TensorBoard使用问题?技巧大放送4!

恒源云

人工智能 深度学习 PyTorch

衡石BI产品预置明道云数据连接器

明道云

架构标准TOGAF实践最重要的三件事

博文视点Broadview

TiFlash 开源了

PingCAP

ICDE 2022|Apache ShardingSphere:一个功能全面和可插拔的数据分片平台

SphereEx

数据库 ShardingSphere 论文 SphereEx

Kubernetes官方java客户端之四:内部应用

程序员欣宸

Kubernetes client 4月月更

Kubernetes官方java客户端之三:外部应用

程序员欣宸

Kubernetes java client

狗尾巴的故事—数智时代的第一性原理|科创人·数智未来私董会

科创人

2022华为软件精英挑战赛复赛名单公布,快来看看都有哪些优秀赛队晋级

科技热闻

恒源云(Gpushare)_如何防止训练不中断?技巧大放送1!

恒源云

算法 服务器 训练

提升 Hybrid 体验:饿了么双十一 PHA 框架技术实践

阿里巴巴终端技术

App 用户体验 Hybrid PHA

恒源云(Gpushare)_如何查看显卡占用的情况?技巧大放送2!

恒源云

算法 GPU服务器 显卡

重塑企业数字化能力,端点科技重磅发布Erda2.0

科技热闻

【直播回顾】OpenHarmony 知识赋能第四期第四课——音频驱动开发

Anna

OpenHarmony

设备资产管理系统解决方案

低代码小观

资产管理 CRM系统 企业设备管理 设备巡检管理系统 企业管理软件

直播预告 | 如何在有限数据下实现资讯类网站海量信息自动分类

百度开发者中心

2022首场MASA技术团队黑客松大赛完美落幕!精彩集锦

MASA技术团队

C# .net 微软

开发者手册之如何成为 OceanBase Contributor

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

We are learning by contributing!访 StarRocks Committer 周康、冯浩桉

StarRocks

数据库 开发者社区 StarRocks

产品知识在线培训的解决方案

小炮

企业知识管理

功能解读|快速上手 OceanBase 数据迁移服务

OceanBase 数据库

oceanbase OceanBase 开源

百度可观测系列 | 如何构建亿级指标的高可用 TSDB 存储集群?

百度开发者中心

恒源云(Gpushare)_没有你想要的镜像?技巧大放送5!

恒源云

镜像仓库 显卡、gpu

高效使用Java构建工具,Maven篇|云效工程师指北

阿里云云效

云计算 maven 阿里云 java 并发 构建工具

科创人·知乎CTO李大海:技术服务内容、商业化依赖内容,曾被「呵呵」难到挠头

科创人

打通产销对接,构建新型数智化农副产品供应链

数商云

产业互联网 数字化

云效制品仓库 Packages,不限容量免费用

阿里云云效

云计算 maven 阿里云 npm 制品仓库

“远见者”特斯拉AI主管Karpathy|深度学习崛起十年

OneFlow

人工智能 深度学习 计算机视觉 特斯拉 openai

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