AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

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

评论

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

【第九课 + 第十课】技术选型:缓存架构 + 消息队列与异步架构

Aldaron

golang实现基于虚拟节点的一致性hash算法

朱月俊

华为厦门DevCloud创新中心正式揭牌,“上云用数赋智”新助力

Geek_116789

架构师训练营:第五周作业-一致性 hash实现

zcj

极客大学架构师训练营

一致性hash算法及java实现(转载,学习了)

王锟

漫画:Integer 竟然有 6 种比较方式?

王磊

Java 编程 漫画 java编程 漫画编程

IOTA架构实战:大数据即时多维查询引擎构建【视频】

易观大数据

大数据 架构模式 查询引擎 数据算法

架构师训练第五周

Hanson

架构师训练营第 5 周作业——一致性Hash算法

在野

极客大学架构师训练营

分布式缓存 - 第五周总结

孙志平

第五次作业

王锟

真懂Spring的@Configuration配置类?你可能自我感觉太良好

YourBatman

Spring Boot Spring Framework @Configuration Spring配置类

架构师课程第五周总结

dongge

小师妹学JVM之:JVM中的Safepoints

程序那些事

Java JVM 小师妹 性能调优 签约计划第二季

第5周作业

田振宇

高性能系统设计

dapaul

极客大学架构师训练营

视读——沟通的艺术,看入人里,看出人外(第一章)

废材姑娘

读书笔记 视觉笔记

重学 Java 设计模式:实战模版模式「模拟爬虫各类电商商品,生成营销推广海报场景」

小傅哥

Java 设计模式 小傅哥 重构 代码规范

Tomcat 架构原理解析到架构设计借鉴

码哥字节

Tomccat 「Java 25周年」

架构师训练营第五周作业 一致性哈希

sunnywhy

架构师训练营第五周作业 设计分布式缓存系统

Melo

极客大学架构师训练营

ES5、ES6中继承的几种写法

Manito

Java

B站Up主自制秃头生成器,一键get张东升同款发型,网友:秃的太过真实

程序员生活志

程序员 B站 隐秘的角落 张东升 秃头生成器

缓存、一致性哈希和负载均衡总结(训练营第五课)

看山是山

缓存 极客大学架构师训练营 一致性hash

一致性哈希实现

娄江国

极客大学架构师训练营

分布式缓存总结

朱月俊

嗯?阿里为啥不用 ZooKeeper 做服务发现?

Java小咖秀

zookeeper 分布式 技术人生

架构师训练第五周一致性Hash

Hanson

面试官:为什么 HashMap 的加载因子是0.75?

哪吒来踢毽子

hashmap

架构师训练营-第五周-命题作业

sljoai

极客大学架构师训练营 第五周

可变对象和不可变对象

Leetao

Python Python基础知识

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