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


Advanced Auto Layout(自动布局进阶使用)

Size-Class-Specific Layout(根据Size Class布局)

size class是对显示环境的一项特征,是对屏幕尺寸的描述。storyboard默认使用。interface builder允许我们基于size class进行配置界面,从而使布局能够适应size class的变化。包括但不限于如下方面:

  • 安装或卸载视图(install / uninstall);
  • 安装或卸载约束(install / uninstall);
  • 设置某些属性(如字体或留白)。

从SB中载入Scene(场景)时,系统会初始化所有视图和约束,连接对应的Outlet(接口)(如有)。我们总是可以通过Outlet访问对象,不考虑当前尺寸类别。然而,只有安装在当前尺寸类别下时,视图和约束才会加入视图结构。

尺寸类别变化时(例如,iPhone从竖屏到横屏,在iPad上从全屏切换至分屏),系统会自动将视图和约束添加至或从视图结构中移除,同时辅以动画效果。

注意

系统负责引用被卸载的对象,无需担心其被意外释放。

Final and Base Size Classes(具体和通用尺寸类别)

尺寸类别共有九种。

四种对应具体设备尺寸:Compact-Compact(宽度紧凑-高度紧凑,简称CC),Compact-Regular(宽度紧凑-高度正常,简称CR),Regular-Compact(宽度正常-高度紧凑,简称RC),Regular-Regular(宽度正常-高度正常,以下简称RR)。

五种代表通用尺寸:Compact-Any(宽度紧凑-高度任意,简称CA),Regular-Any(宽度正常-高度任意,简称RA),Any-Compact(宽度任意-高度紧凑,简称AC),Any-Regular(宽度任意-高度正常,简称AR),Any-Any(宽度任意-高度任意,简称AA)。举例来说,如果一个对象安装在CA下(通用),则其将同时出现在CC和CR下(具体)。一个通用尺寸类别,可能对应二个或四个具体尺寸类别。

如果设置了相同属性,则具体覆盖通用。所有尺寸类别都必须对应一个合法布局。因此,建议采取从”通用”到”具体”的策略:选择一个通用尺寸类别(一般是AA),进行基础布局,根据需要切换至具体尺寸类别,进一步调整。

Using the Size Class Tool(使用尺寸类别工具)

利用IB中的尺寸类别工具(Size Class Tool),我们可以切换尺寸类别。其位于编辑窗口下方中间位置,默认AA。

图61

要切换至其他尺寸类别,点击工具,弹出九宫格:移动鼠标进行选择。九宫格上方显示当前尺寸类别名称,下方显示描述(代表的设备和方向)。每个方块代表一个尺寸类别,点亮绿色圆点表示当前尺寸类别包含这个方块所代表的尺寸类别。

图62

视图或约束默认安装在当前尺寸类别下。删除时,可能情况如下:

  • 从画布或场景对象列表(scene’s document outline)中删除,同时从整个项目中移除;
  • 同时按下Command+Delete键删除,仅从当前尺寸类别下卸载;
  • 当前场景对应一个以上尺寸类别时,除了从画布和场景对象列表(scene’s document outline)中删除,其他情况(例如从尺寸面板删除),仅从当前尺寸类别下卸载;
  • 当前场景仅对应AA尺寸类别时,任何删除都将同时从整个项目中移除。

当前尺寸类别非AA时,编辑窗口工具栏为蓝色,提醒开发者注意。

Using the Inspectors(检视面板)

检视面板中,凡是可以根据尺寸类别设置的内容,前方都有一个+

图63

默认尺寸列别为AA,点击加号,添加其他尺寸类别。下图中分别为宽高添加新尺寸类别。

图64

下图中,每行代表一个尺寸类别,第一行为AA。内容以此基于尺寸类别变化。

图65

要移除某个尺寸类别,点击前面的x即可。

更多关于在IB中设置尺寸类别的内容,详见尺寸类别设计帮助。