我能从iOS 8上的代码中检测到屏幕是规则的还是紧凑的吗?

我能从iOS 8上的代码中检测到屏幕是规则的还是紧凑的吗?,ios,ios8,Ios,Ios8,iOS 8引入了可用于故事板和XIB的新屏幕类型,我可以在代码中检测这些类型吗?如果是,如何进行 在这里,您可以从您链接的页面(添加了强调)中找到更多关于它的信息: 该类用于描述分配给对象的特征集合Traits指定特定对象的大小类、显示比例和惯用语。支持协议的类(如UIViewController和UIView)拥有trait集合。您可以检索对象的特征集合,并在这些特征更改时执行操作 如此处链接的参考中所述,您可以在视图或视图控制器中实现该方法,以了解大小类何时更改。是的,您可以,UIViewC

iOS 8引入了可用于故事板和XIB的新屏幕类型,我可以在代码中检测这些类型吗?如果是,如何进行

在这里,您可以从您链接的页面(添加了强调)中找到更多关于它的信息:

该类用于描述分配给对象的特征集合Traits指定特定对象的大小类、显示比例和惯用语。支持协议的类(如UIViewController和UIView)拥有trait集合。您可以检索对象的特征集合,并在这些特征更改时执行操作


如此处链接的参考中所述,您可以在视图或视图控制器中实现该方法,以了解大小类何时更改。

是的,您可以,UIViewController现在有一个
traitCollection
属性,该属性包含从设备习惯用法到当前大小类等的信息。。。此外,您还可以实现方法
func-traitCollectionDidChange(previousTraitCollection:UITraitCollection)
,以便在大小类(或任何特征)发生更改时(如用户在iphone上旋转设备时)获取通知。您要查找的UITraitCollection的属性是
horizontalSizeClass
verticalSizeClass


希望对您有所帮助

您也可以使用以下扩展来检测设备类型及其方向:

extension UITraitCollection {

    var isIpad: Bool {
        return horizontalSizeClass == .regular && verticalSizeClass == .regular
    }

    var isIphoneLandscape: Bool {
        return verticalSizeClass == .compact
    }

    var isIphonePortrait: Bool {
        return horizontalSizeClass == .compact && verticalSizeClass == .regular
    }

    var isIphone: Bool {
        return isIphoneLandscape || isIphonePortrait
    }
}

UIScreen
也符合协议
UITraitenEnvironment
,因此具有
traitCollection
属性如何在UIScreen中使用traitCollectionDidChange?或者是否有任何NSNotification将被广播?这在以下情况下没有帮助:您处于表单中(因此被迫压缩宽度),并且希望欺骗您的模态控制器使其与窗口的大小类相同。UIViewController的属性:@Property(非原子,只读)UITraitCollection*traitCollection NS_AVAILABLE_IOS(8_0);这违背了整个目的。你应该从H/V维中的紧致/正则性导出。然后,您的显示器将动态显示在iPad上,可分屏+所有设备尺寸。