我可以通过iOS 8上的代码检测屏幕是常规的还是紧凑的?

时间:2014-09-11 18:48:29

标签: ios ios8

iOS 8引入了可在Storyboard和Xib中使用的新屏幕类型,我可以在代码中检测这些类型吗?如果是,怎么样?

您可以在此处找到有关它的更多信息https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html

3 个答案:

答案 0 :(得分:43)

是的,你可以,UIViewControllers现在有一个traitCollection属性,其中包含设备习语,当前大小类等信息......此外,你可以实现方法func traitCollectionDidChange(previousTraitCollection: UITraitCollection)来获取通知size类(或任何特征)已更改(如用户在iphone上旋转设备时)。您正在寻找的UITraitCollection的属性是horizontalSizeClassverticalSizeClass ..这是reference

希望有所帮助

答案 1 :(得分:6)

您还可以使用以下扩展程序检测设备类型及其方向:

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

答案 2 :(得分:3)

从您关联的页面(强调添加):

  

UITraitCollection类用于描述分配给对象的特征集合。 Traits指定特定对象的大小类,显示比例和习惯用法。 支持UITraitEnvironment协议的类(如UIViewController和UIView)拥有特征采集。您可以检索对象的特征集合,并在这些特征发生变化时执行操作。

如从那里链接的引用中所述,您可以在视图或视图控制器中实现traitCollectionDidChange方法,以找出大小类何时更改。