我正在iOS 8上使用自适应布局,我希望得到大小类的确切内容viewDidLoad
.关于那个的任何想法?
Bam*_*rld 72
从iOS 8开始,UIViewController采用UITraitEnvironment协议.此协议声明了一个名为traitCollection的属性,该属性的类型为UITraitCollection.因此,您只需使用即可访问traitCollection属性self.traitCollection
UITraitCollection有两个要访问的属性,名为horizontalSizeClass和verticalSizeClass访问这些属性会返回一个NSInteger.定义返回值的枚举在官方文档中声明如下 - (这可能会在将来添加!)
typedef NS_ENUM (NSInteger, UIUserInterfaceSizeClass {
UIUserInterfaceSizeClassUnspecified = 0,
UIUserInterfaceSizeClassCompact = 1,
UIUserInterfaceSizeClassRegular = 2,
};
Run Code Online (Sandbox Code Playgroud)
所以你可以得到这个类并使用一个开关来确定你的代码方向.一个例子可能是 -
NSInteger horizontalClass = self.traitCollection.horizontalSizeClass;
NSInteger verticalCass = self.traitCollection.verticalSizeClass;
switch (horizontalClass) {
case UIUserInterfaceSizeClassCompact :
// horizontal is compact class.. do stuff...
break;
case UIUserInterfaceSizeClassRegular :
// horizontal is regular class.. do stuff...
break;
default :
// horizontal is unknown..
break;
}
// continue similarly for verticalClass etc.
Run Code Online (Sandbox Code Playgroud)
Jon*_*gel 13
Swift 4的一些有用的东西:
UIViewController扩展以将类作为元组返回.
extension UIViewController {
func sizeClass() -> (UIUserInterfaceSizeClass, UIUserInterfaceSizeClass) {
return (self.traitCollection.horizontalSizeClass, self.traitCollection.verticalSizeClass)
}
}
Run Code Online (Sandbox Code Playgroud)
使用函数的示例Switch语句:
switch self.sizeClass() {
case (UIUserInterfaceSizeClass.unspecified, UIUserInterfaceSizeClass.unspecified):
print("Unknown")
case (UIUserInterfaceSizeClass.unspecified, UIUserInterfaceSizeClass.compact):
print("Unknown width, compact height")
case (UIUserInterfaceSizeClass.unspecified, UIUserInterfaceSizeClass.regular):
print("Unknown width, regular height")
case (UIUserInterfaceSizeClass.compact, UIUserInterfaceSizeClass.unspecified):
print("Compact width, unknown height")
case (UIUserInterfaceSizeClass.regular, UIUserInterfaceSizeClass.unspecified):
print("Regular width, unknown height")
case (UIUserInterfaceSizeClass.regular, UIUserInterfaceSizeClass.compact):
print("Regular width, compact height")
case (UIUserInterfaceSizeClass.compact, UIUserInterfaceSizeClass.compact):
print("Compact width, compact height")
case (UIUserInterfaceSizeClass.regular, UIUserInterfaceSizeClass.regular):
print("Regualr width, regular height")
case (UIUserInterfaceSizeClass.compact, UIUserInterfaceSizeClass.regular):
print("Compact width, regular height")
}
Run Code Online (Sandbox Code Playgroud)
编辑/添加:
如果您试图在UIViewController
生命周期的早期访问特征集合,那么它们可能都是UIUserInterfaceSizeClass.unspecified
.
如果碰巧在代码中做约束,这可能会很痛苦.
我建议.traitCollection
从UIScreen
共享对象访问.
UIScreen.main.traitCollection
Run Code Online (Sandbox Code Playgroud)
甚至更有用:
UIScreen.main.traitCollection.userInterfaceIdiom
Run Code Online (Sandbox Code Playgroud)