如何检测我的设备是否是Swift 4中的iPhoneX?

时间:2017-10-03 00:19:10

标签: ios swift iphone-x

我确信有更好,更合适的方法来做到这一点。但是现在我正在使用UIScreen.main.bounds来检测我是否正在处理iPhone X(812高)。这个特定的应用程序只是景观,顺便说一句。所以这就是我在这个函数中所拥有的,我正在为幻灯片视图创建幻灯片:

func setupSlideViews(slideView: [SlideView]) {
    let screenSize = UIScreen.main.bounds

    var frame: CGRect!
    if screenSize.width == 812 {
        frame = scrollView.frame
    } else {
        frame = view.frame
    }
    scrollView.frame = frame
    scrollView.contentSize = CGSize(width: frame.width * CGFloat(slideViews.count), height: frame.height)

    for (i, slideView) in slideViews.enumerated() {
        slideView.frame = CGRect(x: frame.width * CGFloat(i), y: 0, width: frame.width, height: frame.height)
        scrollView.addSubview(slideView)
    }
}

但是你如何检查模型?

1 个答案:

答案 0 :(得分:18)

如果您需要检测iPhoneX设备是否使用bounds,则取决于设备的方向。因此,如果用户以纵向模式打开您的应用程序,它将失败。您可以使用设备属性nativeBounds,它不会在轮换时更改。

  

在iOS 8及更高版本中,屏幕的bounds属性采用界面   考虑屏幕的方向。这种行为意味着   纵向设备的边界可能与以下不同   横向方向的设备边界。依赖的应用   在屏幕尺寸上可以使用中的对象   fixedCoordinateSpace属性作为任何的固定参考点   他们必须做出的计算。 (在iOS 8之前,屏幕的界限   矩形总是反映相对于a的屏幕尺寸   纵向导向。将设备旋转到风景或   颠倒的方向并没有改变界限。)

extension UIDevice {
    var iPhoneX: Bool {
        return UIScreen.main.nativeBounds.height == 2436
    }
}

使用

if UIDevice.current.iPhoneX { 
    print("This device is a iPhoneX")
}