【问题标题】:How can I detect if my device is an iPhoneX in Swift 4? [duplicate]如何在 Swift 4 中检测我的设备是否是 iPhone? [复制]
【发布时间】:2018-03-14 02:42:00
【问题描述】:

我确信有更好、更合适的方法来做到这一点。但现在我正在使用 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)
    }
}

但是如何检查模型?

【问题讨论】:

标签: ios swift iphone-x


【解决方案1】:

如果您需要检测设备是否为 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")
}

【讨论】:

猜你喜欢
  • 2012-09-18
  • 2011-05-19
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
相关资源
最近更新 更多