写点什么

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

评论

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

华为新机到手升级HarmonyOS 3,畅享多设备高效互联协同

Geek_2d6073

web前端培训学习需要注意什么

小谷哥

专为实时而生 — GreptimeDB 现已在 GitHub 正式开源

Greptime 格睿科技

开源 分布式 云原生 时序数据库 存算分离

B站疯传 Java面试题,24小时删

程序知音

Java java面试 java架构 后端技术 Java面试八股文

你需要知道的webpack高频面试题

Geek_02d948

webpack

web前端培训上海学习好吗

小谷哥

面向智慧城市的GIS框架

tjn

GIS 可视化 11月月更

系统运维利器,百万服务器运维实战总结!一文了解最新版SysAK|龙蜥技术

OpenAnolis小助手

Linux 开源 运维 龙蜥社区 SysAK

鼎医信息加入PolarDB开源数据库社区

阿里云数据库开源

阿里云 polarDB PolarDB-X 阿里云数据库 PolarDB for PostgreSQL

哪些前端学习方法对小白比较有用?

小谷哥

eBPF 实践 -- 网络可观测

观测云

【高并发全彩版小册】阿里内部大佬用7部分讲懂!百亿级高并发系统

程序知音

Java 高并发 java架构 后端技术 高并发架构

搭建企业镜像仓库~Harbor

蜗牛也是牛

STL迭代器失效问题

Maybe_fl

阿里内部高并发核心编程笔记:多线程、锁、JMM、JUC、设计模式

程序知音

高并发 java架构 后端技术 高并发架构

量化交易炒币机器人开发合约策略

薇電13242772558

量化策略

5 分钟教你搭建「视频动作分类」系统

Zilliz

人工智能 计算机视觉 Towhee 视频动作分类

技术贴 | Rocksdb 中 Memtable 源码解析

KaiwuDB

数据库

【简历优化】如何写好项目的亮点难点?项目经历怎么写最好?

王中阳Go

高效工作 学习方法 面试 简历模板 11月月更

数据挖掘、机器学习、深度学习的区别

九章云极DataCanvas

数据挖掘 机器学习 深度学习

带你全面了解Gateway

好程序员IT教育

Spring Cloud Gateway SpringCloud Gateway

如何在大促中做好系统高可用

阿里巴巴云原生

阿里云 微服务 高可用 云原生网关

Docker安装minio(CentOS7)

蜗牛也是牛

大数据培训学习后,就业不好就业

小谷哥

惊艳华为PocketS发布会! 杰美特旗下高端品牌决色推出首款“月光宝壳”

科技热闻

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

Jack

架构实战训练营9期

java学习后该怎么培养自主学习能力

小谷哥

启科量子 QuSprout 正式开源

启科量子开发者官方号

开源 量子计算 量子编程

直播预告|全闪文件存储在 AI 大数据领域的前沿应用

焱融科技

云计算 分布式系统 高性能 文件存储 全闪存储

Go语言—基本输入输出包的使用

良猿

Go golang 后端 11月月更

JAVA concurrency -- AQS 源码详解

骑牛上青山

Java 源码

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