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

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

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

但是,你如何检查模型?

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

在iOS 8和更高版本中,屏幕边界属性将屏幕的界面方向考虑在内。 这种行为意味着纵向方向上的设备边界可能与横向方向上的设备边界不一样。 依赖屏幕尺寸的应用程序可以使用fixedCoordinateSpace属性中的对象作为必须进行的任何计算的固定参照点。 (在iOS 8之前,屏幕的边界矩形总是反映屏幕尺寸相对于纵向的方向。将设备旋转到横向或颠倒方向不会改变边界。)

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

用法

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