ViewController编程指南适应性和尺寸变化-自适应模型

自适应界面是充分利用可用空间的界面。 自适应意味着能够调整您的内容,使其适合任何iOS设备。 iOS中的自适应模型支持简单但动态的方式来重新排列和调整内容以响应更改。 当您利用此模型时,单个应用程序可以适应显着不同的屏幕大小(如图12-1所示),只需很少的额外代码。

图12-1适应不同的设备和方向

VCPG_AdaptiveModel_13-1_2x.png

用于构建自适应界面的重要工具是Auto Layout。 使用“自动布局”,可以定义用于控制视图控制器视图布局的规则(称为约束)。 您可以在Interface Builder中以可视方式创建这些规则,或在代码中以编程方式创建这些规则。 当父视图的大小更改时,iOS会根据您指定的约束自动调整其大小并重新定位其余视图。

特征是自适应模型的另一个重要组成部分。 特征描述了视图控制器和视图必须操作的环境。 特征帮助您做出关于您的界面的高级决策。

特征的作用

当只有约束不足以管理布局时,您的视图控制器有几个机会进行更改。 视图控制器,视图和一些其他对象管理指定与该对象关联的当前环境的特征集合。 表12-1介绍了这些特性以及如何使用这些特性来影响用户界面。

表12-1特征

特征 实例 描述
horizontalSizeClass UIUserInterfaceSizeClassCompact 这个特征传达你的界面的一般宽度。 使用它来进行粗略级布局决定,例如视图是垂直堆叠,并排显示,完全隐藏还是以其他方式显示。
verticalSizeClass UIUserInterfaceSizeClassRegular 这个特征传达你的界面的一般高度。 如果您的设计需要您的所有内容适合在屏幕上,而不滚动,使用这个特质来做布局决定。
displayScale 2.0 该特征传达内容是否显示在视网膜显示器或标准分辨率显示器上。 使用它(根据需要)进行像素级布局决定或选择要显示的图像的版本。
userInterfaceIdiom UIUserInterfaceIdiomPhone 提供此特性是为了向后兼容,并传达您的应用程序运行的设备类型。 避免使用这个特性尽可能多。 对于布局决定,请改用水平和垂直大小类。

使用特制来决定如何呈现您的用户界面。 在Interface Builder中构建界面时,使用特征更改您显示的视图和图像,或使用它们应用不同的约束集。 许多UIKit类,如UIImageAsset,使用您指定的特征来定制他们提供的信息。

以下是一些提示,可帮助您了解何时使用不同类型的性状:

  • 使用大小类对界面进行粗略更改。 大小类更改是添加或删除视图,添加或删除子视图控制器或更改布局限制的适当时间。 您也可以不做任何事情,让您的界面自动适应其现有的布局约束。
  • 不要假设大小类对应于视图的特定宽度或高度。 您的视图控制器的大小类可以改变很多原因。 例如,iPhone上的容器视图控制器可能使其中一个子项水平正则,以强制其显示其内容不同。
  • 使用Interface Builder根据需要为每个大小类指定不同的布局约束。 使用Interface Builder指定约束要比添加和删除约束简单得多。 View控制器通过从它们的storyboard应用适当的约束来自动处理大小类的变化。
  • 避免使用惯用语言来决定您的界面的布局或内容。 在iPad和iPhone上运行的应用程序通常应显示相同的信息,并应使用大小类来进行布局决策。

当特征和尺寸变化发生?

特征变化很少发生,但它们确实发生。 UIKit基于对底层环境的更改来更新视图控制器的特征。 尺寸类特征比显示尺度特征更有可能改变。 惯用语言特性应该很少,如果有的话,改变。 发生尺寸类更改的原因如下:

  • 视图控制器窗口的垂直或水平大小类别已更改,通常是因为设备旋转。
  • 容器视图控制器的水平或垂直大小类已更改。
  • 当前视图控制器的水平或垂直尺寸类通过其容器显式更改。

视图控制器层次中的大小类更改传播到任何子视图控制器。 窗口对象用作该层次结构的根,为其根视图控制器提供基线大小类特征。 当设备方向在纵向和横向之间变化时,窗口更新其自己的大小类信息,并将该信息传播到视图控制器层次结构中。 容器视图控制器可以将修改传递给未修改的子视图控制器,或者它们可以覆盖每个子对象的特性。

在iOS 8及更高版本中,当设备在横向和纵向方向之间旋转时,窗口始终位于左上角,窗口的边界将更改。 窗口大小更改与视图控制器层次结构以及任何对应的特性更改一起传播。 对于层次结构中的每个视图控制器,UIKit调用以下方法来报告这些更改:

  1. willTransitionToTraitCollection:withTransitionCoordinator:告诉每个相关的视图控制器它的traits即将改变。
  2. viewWillTransitionToSize:withTransitionCoordinator:告诉每个相关的视图控制器它的大小将要改变。
  3. traitCollectionDidChange:告诉每个相关的视图控制器它的traits现在已经改变。

当移动视图控制器层次结构时,UIKit仅在有报告更改时才将更改报告给视图控制器。 如果容器视图控制器覆盖其子项的大小类,那么当容器的大小类更改时不会通知这些子项。 类似地,如果视图控制器的视图具有固定的宽度和高度,则它不会接收大小更改通知。

图12-2显示了当iPhone 6上发生旋转时,视图控制器的特征和视图大小如何更新。从纵向到横向的旋转将屏幕的垂直大小类从常规更改为紧凑。 大小类别改变和对应的视图大小改变然后沿着视图控制器层级传播。 在将视图动画化为其新大小后,UIKit在调用视图控制器的traitCollectionDidChange:方法之前应用大小类和视图大小更改。

图12-2更新视图控制器的特性和视图大小

VCPG_RotationTraits_fig_13-2_2x.png

不同设备的默认大小类别

每个iOS设备都有一组默认的大小类,您可以在设计界面时将其用作指南。 表12-2列出了纵向和横向设备的大小类别。 表中未列出的设备与具有相同屏幕尺寸的设备具有相同的大小类别。

表12-2不同屏幕尺寸的设备的尺寸类别。

屏幕快照 2016-11-28 下午4.16.09.png

重要

不要假设您的应用程式会在装置上显示特定大小类别。 在决定如何配置对象时,始终
检查对象的特征集合中找到的大小类。

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

推荐阅读更多精彩内容