iOS-检测viewDidLoad上的当前大小类

我正在使用iOS 8上的自适应布局,我想获得viewDidLoad上的大小。 任何想法呢?

从iOS 8开始, UIViewController采用UITraitEnvironment协议。 该协议声明了一个名为traitCollection的属性,它是UITraitCollectiontypes的。 您可以通过使用self.traitCollection来访问traitCollection属性

UITraitCollection有两个属性,你想访问名为horizo​​ntalSizeClassverticalSizeClass访问这些属性返回一个NSInteger 。 定义返回值的枚举在官方文档中声明如下 – (这可能会在未来添加!)

 typedef NS_ENUM (NSInteger, UIUserInterfaceSizeClass { UIUserInterfaceSizeClassUnspecified = 0, UIUserInterfaceSizeClassCompact = 1, UIUserInterfaceSizeClassRegular = 2, }; 

所以你可以得到这个类,并用一个开关来确定你的代码方向。 一个例子可能是 –

 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. 

Swift 4的一些有用的东西:

UIViewController扩展将类返回为一个元组。

 extension UIViewController { func sizeClass() -> (UIUserInterfaceSizeClass, UIUserInterfaceSizeClass) { return (self.traitCollection.horizontalSizeClass, self.traitCollection.verticalSizeClass) } } 

示例切换语句以使用该函数:

  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") } 

这对于testing/debugging是很好的:

 let sizeClasses = ["Unspecified", "Compact", "Regular"] print("SizeClass w:\(sizeClasses[traitCollection.horizontalSizeClass.rawValue]) h:\(sizeClasses[traitCollection.verticalSizeClass.rawValue])") 

因此,对于自动布局,您可以为每个不同大小的类devise应用程序的UI。 操作系统做所有的工作,搞清楚正在使用的设备和应该使用什么样的大小类。 但是,如果你有一个方法来找出什么设备正在使用。 我不确定是否可以决定使用什么样的大小类,这又是由操作系统dynamic处理的。

使用设备的代码:

 NSString *device = [[UIDevice currentDevice]model ] ; NSLog(@"%@",device);