如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

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

评论

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

3D游戏建模在Maya中加快建模速度的5种技巧

Finovy Cloud

云渲染 建模 maya

滴滴前端一面常考手写面试题合集

helloworld1024fd

JavaScript

常用EMC元器件简介——防护器件

元器件秋姐

电子工程师 元器件科普 EMC防护 硬件知识

北京大数据开发技术培训机构怎么样

小谷哥

React-hooks面试考察知识点汇总

beifeng1996

React

React-Hooks怎样封装防抖和节流-面试真题

beifeng1996

React

高频js手写题之实现数组扁平化、深拷贝、总线模式

helloworld1024fd

JavaScript

Flink 容错恢复 2.0 2022 最新进展

Apache Flink

大数据 flink 实时计算

腾讯前端vue面试题合集

bb_xiaxia1998

Vue

大数据培训机构该如何选择?

小谷哥

滴滴前端一面经典手写面试题

helloworld1024fd

JavaScript

深入解读Netty 底层核心源码,全面分析Netty特新

程序知音

Java Netty io java架构 后端技术

2023春招最全Java面试八股文,已经帮助512人进入大厂

程序知音

Java java面试 Java面试八股文 后端面试

阿里云产品专家陶炳哲:Java应用最佳实验

云布道师

阿里云 Java、

面试官:请实现Javascript发布-订阅模式

helloworld1024fd

JavaScript

直播预约 | 微服务x容器开源开发者 Meetup 上海站回顾 & PPT下载

阿里巴巴云原生

阿里云 开源 容器 微服务 云原生

web前端开发课程怎么样

小谷哥

软件测试/测试开发 | TestNG 与 Junit 对比,测试框架如何选择?

测试人

软件测试 单元测试 JUnit 测试开发 testNG

SOFARegistry | 聊一聊服务发现的数据一致性

SOFAStack

SOFA SOFARegistry'

更稳定!Apache Doris 1.2.1 Release 版本正式发布|版本通告

SelectDB

数据库 大数据 数据分析 bug 版本发布

前端react面试题(必备)

beifeng1996

React

vue面试之Composition-API响应式包装对象原理

bb_xiaxia1998

Vue

如何学习大数据开发技术

小谷哥

web前端培训前景怎么样?

小谷哥

前端必会react面试题合集

beifeng1996

React

vue这些原理你都知道吗?(面试版)

bb_xiaxia1998

Vue

架构模块3作业-外包学生管理系统架构文档

梁山伯

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