写点什么

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

评论

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

OpenHarmony集成OCR三方库实现文字提取

OpenHarmony开发者

OpenHarmony

[力扣] 剑指 Offer 第一天 - 包含min函数的栈

陈明勇

Go 数据结构与算法 力扣 11月月更

CANN 6.0来了,硬核技术抢先看

华为云开发者联盟

人工智能 华为云 昇腾 CANN 6.0

高频量化合约对冲交易软件开发源代码

开发微hkkf5566

数据中台选型必读(五):中台建设本质就是构建企业的公共数据层

雨果

数据中台

可防离职员工冒用身份,合合信息名片全能王与钉钉用数字名片打造安全“围栏”

合合技术团队

人工智能 大数据 钉钉 合合信息 名片

国产数据库肇始之独具特色的场景需求

亚信AntDB数据库

数据库 AntDB 国产数据库 AntDB数据库

Java Web(十)Filter和Listener

浅辄

javaWeb filter listener 11月月更

5.图学习【参考资料2】-知识补充与node2vec代码注解

汀丶人工智能

图神经网络 11月月更

李白:你的模型权重很不错,可惜被我没收了

OneFlow

人工智能 深度学习 模型

Prometheus 监测 RocketMQ 最佳实践

Apache RocketMQ

RocketMQ #java #运维 消息序列

字节跳动基于ClickHouse优化实践之“资源隔离”

字节跳动数据平台

大数据 Clickhouse

龙蜥理事长马涛荣获 “2022 年度开源人物”

OpenAnolis小助手

开源 操作系统 龙蜥社区 理事长 2022云栖大会

详细解读 React useCallback & useMemo

夏天的味道123

React

商业智能工具BI口碑解读:Quick BI为何连续入选魔力象限?

夏日星河

wallys-WiFi-5-outdoor-Access-point-IPQ4019/4029-industrial wireless AP

Cindy-wallys

IPQ4019 ipq4029

质量评估模型助力风险决策水平提升

百度Geek说

机器学习 企业号十月 PK 榜 智能测试 质量评估模型

Apache EventMesh事件驱动分布式运行时

EventMesh布道师

Serverless Faas EDA workflow eventmesh

一汽集团数字化转型细节分析:明确如何转型事半功倍

雨果

数字化转型

Java Web(十一)Ajax&Axios&JSON

浅辄

json ajax javaWeb axios 11月月更

会用postman不算牛,会用Eolink才是真的牛

陈橘又青

API

软件测试丨测试大咖漫谈如何搞定软件质量?

测试人

软件测试 软件质量 自动化测试 测试开发

经常被问到的react-router实现原理详解

夏天的味道123

React

启科量子 QuSprout 或将启动开源计划

启科量子开发者官方号

人工智能 框架 算力 超算 #量子计算

阿里 CTO 程立:今年双 11,全面深度用云

云布道师

云计算 阿里巴巴 天猫

解读数仓常用模糊查询的优化方法

华为云开发者联盟

数据库 后端 华为云

详解React的Transition工作原理原理

夏天的味道123

React

大麦 Android 选座场景性能优化全解析

阿里巴巴终端技术

android 性能优化 客户端

引迈信息低代码怎么样?靠谱吗?

优秀

低代码 低代码平台

传统 Web 框架部署与迁移

阿里巴巴云原生

阿里云 Serverless 云原生

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