【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

评论

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

数据中心大二层网络技术大揭秘

华为云开发者联盟

服务器 数据中心 虚拟化 大二层网络 VLAN

腾讯云大数据发布数据生态战略,构建开源开放数仓生态

腾讯云大数据

大数据 数据仓库

HTML03 - 表格

Mr.Cactus

html

Vue 3 组件开发:搭建基于 Vite 的在线表格编辑系统(组件集成)

葡萄城技术团队

vue.js Vue SpreadJS vite

甲方日常 80

句子

工作 随笔杂谈

腾讯云加速构建云原生数据仓库,助力企业数字化转型

腾讯云大数据

大数据 数据仓库

架构师训练营技术知识点

业哥

音视频技术入门基础

赖猫

c++ 音视频 ffmpeg

资深首席架构师预测:2021年云计算的8个首要趋势

Rancher

容器 rancher

让你的react代码跑在svelte引擎上

闲鱼技术

Socket粘包问题的3种解决方案,最后一种最完美!

王磊

Java socket websocket

智慧警务大数据平台开发,数据可视化分析平台搭建

t13823115967

大数据

12周作业

走走,停停……

Angel图神经网络算法在推荐场景下的实践

DataFunTalk

大数据

规避单点故障,MySQL 8.0 MGR软负载怎么选?

dbaplus社群

数据库

HTML02 - 列表

Mr.Cactus

html

AWS x 德勤 | “三步走”策略,赋能企业打造洞察驱动型组织

亚马逊云科技 (Amazon Web Services)

云计算 AWS

IPFS挖矿APP系统开发|IPFS挖矿软件开发

系统开发

Java达到什么样的水平才能通过阿里社招?

Java架构师迁哥

程序员能靠比特币能致富(暴富)吗?

程序员陆通

比特币 区块链

HTML01 - 标签

Mr.Cactus

html

十三周作业

solike

ClickHouse的实践之路

DataFunTalk

数据库

浅谈机器学习模型推理性能优化

张凯峰

人工智能 机器学习

冰河开始对Dubbo下手了!

冰河

微服务 dubbo 源码解析 服务治理 RPC调用

园区能耗监测平台搭建,能源管控系统管理

t13823115967

能源管控

Rancher年终盘点丨历尽千帆,岁月可期

Rancher

rancher

HTML04 - 表单

Mr.Cactus

html

从技术视角看考拉海购的云原生之路

阿里巴巴中间件

云计算 云原生

SRE灵魂之SLI和SLO

勇往直前的胖子

SRE SLO

NSE交易所系统软件开发|NSE交易所APP开发

系统开发

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