写点什么

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

评论

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

1688商品详情API返回值深度研究:阿里巴巴中国站数据驱动的客户服务优化

技术冰糖葫芦

API Explorer API 安全 API 文档

应用交付与负载均衡:深入解析网络架构中的关键技术

通明湖

负载均衡 应用交付

通过阶乘获取一个一维PHP数组中全部的组合情况

左诗右码

经验整理 小甲鱼Python

万里无云万里天

Python 经验分享

PikiwiDB(Pika) 3.5 最佳实践

apache/dubbo-go

redis Pika

认证总结 北京业余无线电台A类

万里无云万里天

通信 无线电

经验整理 神经网络基础知识

万里无云万里天

人工智能 神经网络

通义灵码 Visual Studio 下载安装指南(附安装包)

阿里云云效

阿里云 云原生 通义灵码

《神经网络设计》PDF

程序员李木子

龙华区工业软件赋能制造业创新发展思享会成功举办!

最新动态

【建议收藏】Go语言关键知识点总结

不在线第一只蜗牛

c++ Go 算法 开发语言

Character AI 推出实时语音通话功能;AirPods 将配备红外摄像头模组丨 RTE 开发者日报

声网

Confluence又一重磅软件:Confluence白板,附5款好用的替代软件推荐!

彭宏豪95

效率工具 职场 在线白板 Confluence 办公软件

办公神器小浣熊:有你我怎能不摸鱼

知识浅谈

AI AIGC 办公小浣熊

VSPD9.0基础 建立一对互联的虚拟串口,进行串口通信的测试

万里无云万里天

虚拟化 串口通信 VSPD

我在中东做MCN,月赚10万美金

自象限

鸿蒙笔记 下载和安装DevEco Studio

万里无云万里天

DevEco Studio 鸿蒙系统

从人工到自动化到AIOps再到ChatOps:大模型在运维领域的应用

京东科技开发者

使用 Amazon Bedrock Converse API 简化大语言模型交互

亚马逊云科技 (Amazon Web Services)

API 生成式人工智能

六月的魔力:揭秘2024年加密市场与Reflection的创新与收益

BlockChain先知

查思专利,为全球科研人员修一条信息“高铁”

脑极体

AI

经验整理 Datawhale-23期数据挖掘-心跳信号分类预测

万里无云万里天

人工智能 数据挖掘

技术干货丨如何加速工业数字孪生应用落地?

Altair RapidMiner

人工智能 数据分析 数字孪生 altair

什么是性能测试,一篇文章告诉你!

霍格沃兹测试开发学社

【程序大侠传】异步架构应用回调数据接收接口偶发NPE

Disaster

三七互娱彭美:广游联运模式下,部分游戏付费量提升达1400%

最新动态

轻松实现商品多属性组合:深入理解笛卡尔乘积的 PHP 实现方法

左诗右码

通义灵码 Visual Studio 下载安装指南(附安装包)

阿里巴巴云原生

阿里云 云原生 通义灵码

大模型应用Step-By-Step

京东科技开发者

如何在 Spring Boot 中开发一个操作日志系统

网罗开发

Java’ 企业号 6 月 PK 榜

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