写点什么

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

评论

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

产品网站的FAQ页面该如何编辑?

Baklib

产品 FAQ

什么是 NFT 蓝筹项目

NFT Research

区块链 NFT

赋能信息技术应用创新,需要怎样的可持续性业务架构?

通明湖

负载均衡

智采云火了的背后,是企业降本增效的刚需

ToB行业头条

uniapp引入 iconfont

源字节1号

微信小程序 软件开发 前端开发 后端开发

游戏链改NFT系统开发Web3技术

薇電13242772558

web3

如何通过Java将PDF转为Excel

Geek_249eec

Excel PDF java;

双11就要到了,是时候给你的电脑来点硬货了!

淋雨

数据恢复 OCR 滤镜 录屏 磨皮

Dubbo核心技术

苏格拉格拉

分布式 微服务 dubbo RPC 集群

HTML学习笔记(一)

lxmoe

html 前端 学习笔记 11月月更

1年Java经验,信心满满出去面试,被问麻了...

Java永远的神

spring 程序员 后端 JVM Java 面试

网易云信智码超清转码技术实践

网易云信

音视频开发

因热爱而分享!阿里云开发者社区 X InfoQ创作者支持计划发布

阿里技术

Redis数据结构

苏格拉格拉

redis 缓存 Redis 数据结构

Baklib|如何搭建在线帮助中心站点?

Baklib

云栖大会开源重磅升级!PolarDB-X v2.2: 企业级和国产化适配

阿里云数据库开源

阿里云 polarDB 云栖大会 PolarDB-X 阿里云数据库

云科通明湖:金融业务可持续性能力建设,少不了这块“拼图”!

通明湖

负载均衡

概述DDoS分类

穿过生命散发芬芳

DDoS 11月月更

Docker PHP 入门实践 (三)

Felix

php Docker thinkphp 11月月更

Oracle表空间设计基本原则

默默的成长

oracle 前端 11月月更

并发编程中的锁、条件变量和信号量

C++后台开发

Go 并发编程 linux开发 C++开发

Redis核心技术

苏格拉格拉

redis 架构 持久化 部署 集群

RocketMQ核心技术

苏格拉格拉

RocketMQ 消息队列 消息中间件 微服务框架

oracle中计算两个日期的相差天数、月数、年数等等

默默的成长

oracle 前端 11月月更

微服务先等等,我去刷个“虚拟背景”的副本

为自己带盐

虚拟背景 11月月更 trtc

介绍:什么是智能合约dapp系统开发一站式服务

W13902449729

Wallys/QCN9074 WiFi 6E Card OpenWRT, IPQ6010, IPQ6018,802.11ax,industrial m.2 card/QUECTEL RM500Q-GL

wallys-wifi6

IPQ6010 ipq6018 QCN9074

阿里进入“全面云原生深度用云”阶段 PaaS支出占用云总成本43%

阿里技术

云计算 云原生 云栖大会

Oracle 开发规范(一)

默默的成长

oracle 前端 11月月更

最新的国内低代码开发平台排名,你知道几个?

优秀

低代码 低代码开发平台 低代码平台

阿里云机器学习平台 PAI宣布集成国产深度学习框架 OneFlow

阿里云大数据AI技术

机器学习 阿里云 oneflow

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