iOS DeveloperSwift进阶ios

iOS使用SizeClasses进行不同型号、横竖屏下的不同布局

2018-07-06  本文已影响57人  XueYongWei

一、什么是SizeClasses

SizeClasses 是从iOS 8开始,Apple在应用界面的可视化设计上添加的一个新的特性。

SizeClasses认为:对于任何设备来说,界面的宽度和高度都只分为三种描述:紧凑,任意和宽松。这样开发者便可以无视设备具体的尺寸,而是对这两类和它们的组合进行适配。

Apple共推出了frame 、autoresizing、autolayout、SizeClasses等布局方式。

SizeClasses仅仅是对屏幕进行了分类, 真正排布UI元素还得使用autolayout。

使用了SizeClasses不再有横竖屏的概念, 只有屏幕尺寸的概念;不再有具体尺寸的概念, 只有抽象尺寸的概念。

二、SizeClasses的表示方法

SizeClasses把宽度和高度各分为3种情况

  1. Compact : 紧凑(小)
  2. Any : 任意
  3. Regular : 宽松(大)

SizeClasses表示与设备屏幕对应关系

  1. iPhone4S,iPhone5/5s,iPhone6
  1. iPhone6 Plus
  1. iPad
  1. Apple Watch(猜测)

以上关系不必记住,打开底部的编辑器通,过点击各手机、屏幕方向,就能查看横竖屏情况下w和h的表示方法。
比如在iPhone8 plus的横屏下是w:R h:C。


w:R h:C

三、SizeClasses的使用方法

一般情况下,一个IB(xib/storyboard)文件会是一个竖屏显示的某机型显示效果,你所添加的约束,会是所有机型所有屏幕方向上的约束。你可以通过底部的view as进行切换机型和屏幕方向进行效果预览。

想要添加其他机型或者屏幕方向上的约束,需要先进去编辑模式,点击view as后,出现如下图的面板


编辑面板

点击Vary for Traits进入编辑模式,弹出了Width和Height选项,前面打对号就锁定当前的这个属性。

Vary for Traits

通过点击“❓”可以查看Apple的文档,用白话来讲,步骤就是

  1. 在view as选择当前的模式
  2. 点击Vary for Traits选择编辑模式
  3. 查看受影响的模式
  4. 进入编辑模式进行编辑,然后结束编辑

这个时候就可以对约束进行编辑了。
选取确定之后整个SizeClasses选项框就变成蓝色的,也就是进入了编辑模式。点击任意位置能让弹窗消失。

蓝色表示进入了编辑模式
注意:
只有当您进入了编辑模式,才能对特殊模式下的约束进行增删改等操作,否则约束将添加到所有的模式下。

在view as里切换效果后,可在约束里通过点选切换Constrats选项,看到当前模式或者所有模式的约束。
但是通过切换只是查看此模式的约束,而不是进入当前模式的编辑状态

切换模式查看约束

四、Vary for Traits 怎么选

通过点击Vary for Traits进入编辑模式,弹出了Width和Height选项,前面打对号就锁定当前的这个属性。
锁定模式后,就可以开始编辑约束,这些约束就会在当前受影响的显示模式下生效。

比如已经锁定了当前模式为w:Regular h:Compact:
根据本文[二、SizeClasses的表示方法][SizeClasses表示与设备屏幕对应关系]可知,
锁定了w:Regular h:Compact模式后编辑的约束,将会对iphone的Plus机型横屏模式生效。

举几个例子来说明Vary for Traits 该怎么选:

1. 什么都不选

默认
什么都不选的时候,默认为(),即通用界面,所有尺寸设备通用。我们通过Device和Orientation可以组合出所有尺寸设备的横竖屏情况。

2. 在view as选择显示wC的时候选择Width

即竖屏模式下,选择Width,表示锁定当前Width的模式,即表示(C,*)。

wC时锁定Width

(C,*)的显示模式有(C,C)和(C,R),通过Size Class类型判断可以得到是20种:

  1. iPhone竖屏 (C,R)5种
  2. iPhone横屏 (C,C)4种
  3. iPad splitView下,显示区域小于2/3的,(C,R)11种

当然,编辑面板中的显示,受影响的模式确实为20种,可以通过点击查看受影响的模式有哪些。

3. 在view as上显示hC的时候选择Height

即横屏模式下,选择Height,表示锁定当前Height的模式,表示(*,C)。

hC时锁定Height

(*,C)的显示模式有(C,C)和(R,C),通过Size Class类型判断可以得到是26种:
原理一样,不再列举,自行动手查看结果。

自己动手,丰衣足食,其他情况不再列举...... 😊

UIStackView中的SizeClasse

在iOS9之后,Apple推出了UIStackView ,一个更方便的布局方式。UIStackView会管理其子视图的布局,并帮我们自动布局约束。也就是说,这些子视图能够适应不同的屏幕尺寸。
我们在这里不进行讨论UIStackView的用法。

UIStackView既然自动布局其子视图,那么是不是有关于SizeClasse的属性呢?

当然有了,比如最常见的需求,想竖屏的时候竖着显示,横屏的时候横着显示,只需要在UIStackView设置Axis点击左侧“+”添加一个SizeClasse的模式即可。

image.png

您是否发现了,在本文的截图里,在横竖屏模式下,除了布局不同,图片也是不同的,更多关于SizeClasse的操作秀,请移步:
iOS使用Assets配合SizeClasses横竖屏显示不同图片

DEMO代码下载:https://github.com/xueyongwei/SizeClassesDemo

上一篇下一篇

猜你喜欢

热点阅读