view和viewControll都遵守UITraitEnvironment协议,该协议中有一个traitCollection属性和一个方法:
public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
该属性是UITraitCollection类型,该类有下面一些属性
displayScale描述当前显示器的显示比例1,2,3
userInterfaceIdiom描述当前设备类型,是一个枚举phone、pad、tv、carplay
horizontalSizeClass和verticalSizeClass 都是枚举,描述SizeClass, 意义是
:
horizontalSizeClass和verticalSizeClass的值都是regular,运行在ipad上
horizontalSizeClass和verticalSizeClass的值都是compact,运行在iphone水平方向(除了6p和7p)
horizontalSizeClass是regular,verticalSizeClass是compact,运行在6p和7p的水平方向上
horizontalSizeClass是compact,verticalSizeClass是regular,运行在iphone的竖直方向上
利用这些属性可以得到app运行的环境以便在不同环境下进行适配
当app运行的环境改变时UITraitEnvironment协议会通知上面的方法以便app进行适配,上面的方法提供之前的信息作为参数,如果想获得改变之后的信息可以用self.traitCollection
还可以自己创建UITraitCollection类型的实例
let tcdisp = UITraitCollection(displayScale: 2.0)
let tcphone = UITraitCollection(userInterfaceIdiom: .phone)
let tcreg = UITraitCollection(verticalSizeClass: .regular)
let tc = UITraitCollection(traitsFrom: [tcdisp,tcphone,tcreg])
最后一个初始化方法将前面三个实例进行组合,如果前面三个实例设置的属性有重复,以数组最后一个实例设置的为准。不同属性设置进行组合
UITraitCollection实例还可以用下面的方法进行比较
open func containsTraits(in trait: UITraitCollection?) -> Bool
网友评论