AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

评论

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

操作系统加码主动防护:数智化有了“安全底座”

Alter

操作系统 openEuler AI 基础设施

聊天机器人API:腾讯、百度、阿里云接口对比

幂简集成

聊天机器人 API

Flink Forward Asia 2024 上海站|探索实时计算新边界

阿里云大数据AI技术

大数据 flink FFA FFA2024

Redis性能优化的18招

不在线第一只蜗牛

redis

实时多模态 AI 的 N 种新可能丨实时互动和大模型专场@RTE2024回顾

声网

鸿蒙hvigor构建任务依赖与生命周期简介

龙儿筝

Scrum敏捷开发的核心:深入解析Product Backlog

代码忍者

人员关系管理系统(源码+文档+部署+讲解)

深圳亥时科技

枫清科技亮相 2024 中国 5G+工业互联网大会,推动 AI 赋能新型工业化

Fabarta

智能体 大模型

《Django 5 By Example》阅读笔记:p679-p765

codists

Python django

「工作流Agent」亮相百度世界大会,百度智能云千帆 AppBuilder 产品功能重磅升级

Baidu AICLOUD

rag

鸿蒙NEXT开发案例:随机数生成

zhongcx

NocoBase 本周更新汇总:优化移动端样式

NocoBase

开源 低代码 零代码 无代码 版本更新

Java哪个框架适合开发API接口?

科普小能手

API java框架 Java 开发 API 接口 Java.

茶思屋直播|构建多元共生的生态空间:TinyEngine生态的融合之道

OpenTiny社区

开源 前端 低代码 OpenTiny

更快、更稳、更优,揭秘火山引擎全站加速 DCDN 规模容器化最佳实践

火山引擎边缘云

容器 云原生 边缘计算 全站加速

鸿蒙NEXT开发案例:随机密码生成

zhongcx

可视化工具对比:JimuReport VS QuickBI

JEECG低代码

数据可视化 数据大屏 报表工具 仪表盘设计

鸿蒙开发Hvigor插件动态生成代码

龙儿筝

如何在ppt中添加数字图标?推荐这款在线版PPT软件!

职场工具箱

效率工具 PPT 办公软件 AIGC AI生成PPT

解锁电商新视野:淘宝商品详情API接口的实时属性与价格数据探索

代码忍者

API 接口 pinduoduo API

班级招生平台(源码+文档+部署+讲解)

深圳亥时科技

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