1. Understanding Auto Layout(理解自动布局)@Auto Layout Guide(自动布局指南)

翻译@Auto Layout Guide(自动布局指南)


Getting Started(新手上路)

Understanding Auto Layout(理解自动布局)

自动布局(Auto Layout)基于约束,动态计算视图结构中所有视图的尺寸和位置。例如,约束一个按钮(button),使其水平对齐一张图片(image view);且按钮上边(top)总是位于图片视图下边(bottom)下方8pt(point)的地方。图片的尺寸或位置发生变化,按钮的位置也会相应调整。

这种以约束为基础的布局方式,允许我们创造可以动态响应内外部变化的用户界面。

External Changes(外部变化)

外部变化源自父视图(superview)尺寸或形状的改变。每次变化,都需要更新视布局,以达到最佳显示效果。常见的外部变化来源如下:

  • 用户缩放窗口(window)(OS X)。
  • 在iPad上,用户进入或离开分屏视图(Split View)(iOS)。
  • 设备旋转(iOS)。
  • 通话或录音时,屏幕上方指示条的出现和消失(iOS)。
  • 适配不同尺寸类别(size class)。
  • 适配不同屏幕尺寸。

上述改变大多发生在运行时,要求app能够动态响应。剩下的,例如适配不同屏幕尺寸,意味着app需要主动适应不同的显示环境。自适应界面可以确保app在iPhone 4S,iPhone 6 Plus甚至iPad上显示正常,即使屏幕大小不会在运行时改变。此外,自动布局也是iPad上支持滑动和分屏视图的关键所在。

Internal Changes(内部变化)

内部变化源自界面改变引起的视图或控件尺寸的变化。

常见的内部变化来源如下:

  • app展示的内容变化。
  • app支持国际化(Internalization)。
  • app支持动态字体(Dynamic Type)(iOS)。

app内容变化时,新内容所需的布局很可能与旧的不同,常见于展示文字或图片时。例如,每篇新闻长短不一,需要不断根据文本调整布局。类似的,拼图软件必须能够处理不同尺寸,不同比例的图片。

国际化是指配置app,使其能够适应不同语言,地区,文化的过程。支持国际化的app必须考虑上述因素对布局的影响,从而正确显示内容。

国际化对布局的影响主要有三点。其一,翻译后,标签(label)的内容会改变,所需的空间也会改变。例如,表达同一个意思,德语通常比英语长,而日语最短。

其二,使用同一门语言,不同地区使用不同格式表示日期和数字。虽然,相较于不同语言,这种变化不起眼,但界面仍然需要调整。

其三,改变语言不止影响文字大小,也会影响文字的阅读方向。不同语言的阅读方向。例如,英语从左至右,而阿拉伯语和希伯来语都是从右至左。总之,界面元素的排布需要和阅读方向吻合。如果使用英语时按钮位于右下角,那么使用阿拉伯语时它就应该在左下角。

最后,对于iOS app来说,如果支持动态字体,则用户可以改变app字体大小。文本元素的尺寸会因此发生变化。如果用户在运行时改变字体大小,app的布局必须响应。

Auto Layout Versus Frame-Based Layout(自动布局 vs. frame布局)

(译者:frame这个词我就不翻译了🤔)

布局一个界面的元素的方式主要有三种。frame布局,自动缩放(auto resizing)以及自动布局。

以前,布局时,需要为视图结构中每个视图设定frame。frame定义了视图尺寸及其在父视图坐标系中的位置。

图1

为了精确,我们必须计算每个视图的frame。布局一旦发生变化,相关frame都需要重新计算。

从诸多方面看,frame布局是最为灵活和强大的,足以应对任何改变。然而,随之而来的,是我们必须手动管理所有视图的frame,结果就是即便是一个简单界面,也需要花费许多精力去设计,调试和维护。其难度会随着界面复杂度增加成倍上升。

自动缩放的出现在一定程度上减轻了我们的负担。自动缩放规定父视图的frame变化时,视图的frame如何应对。如此一来,简化了布局响应外部变化所需的工作。

然而,自动缩放支持的布局关系很有限。面对复杂界面,我们经常需要通过代码调整自动缩放掩码。此外,它仅响应外部变化,对于内部变化却无能为力。

相比之下,自动缩放仅仅是frame布局基础上的优化,自动布局却代表着一种全新的布局设计范式。frame的概念不复存在,我们要思考的,是视图之间的关系。

自动布局通过约束创建界面。约束一般代表两个视图之间的关系。自动布局根据约束计算视图的位置和尺寸。因此,界面布局可以动态响应或外部变化。

图2

通过约束定义视图行为,这背后的逻辑与面向过程以及面向对象编程大相径庭。幸运的是,掌握自动布局和掌握其他编程技能并无不同。分为两个步骤:首先我们必须理解约束所代表的逻辑,然后熟练使用相关API。在学习其他编程技能的过程中,我们不断重复上述步骤。自动布局也不例外。

接下来,本文会帮助大家逐步掌握自动布局。章节:Auto Layout Without Constraints(不使用约束的自动布局)讲解一个基于自动布局的高级抽象界面元素,其大大简化了特定场景下自动布局的使用。章节:Anatomy of a Constraint(约束详解)为理解和使用自动布局提供了理论支持。章节:Working with Constraints in Interface Builder(通过界面编辑器创建约束)讲解可视化的约束设计工具。章节: Programmatically Creating Constraints(代码创建约束)和章节:Auto Layout Cookbook(自动布局使用手册)细致解释相关API。最后,章节:Auto Layout Cookbook(自动布局使用手册)列举多个复杂程度各异的自动布局范例,以供研究和参考。而章节:Debugging Auto Layout(调试自动布局)为调试自动布局提供思路和工具。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容