首页 > 解决方案 > 如何找到给定视图显示在哪个 UIScreen 上?

问题描述

在 iOS 上使用UIScreen不是很常见(用于检查规模和特征)。UIScreen.main可以在需要时轻松访问这些属性。

在 iOS 上拥有多个屏幕肯定不太常见,但在 AirPlay 和带有 USB-C 的 iPad 上的外接显示器上是可能的。屏幕实例列表位于 下UIScreen.screens

有没有一种简单的方法可以从给定的 中知道UIView它正在显示在哪个屏幕上?

像这样的东西会很有用:

extension UIView {
    var screen: UIScreen {
        // Return screen where the view is being displayed (might be `.main`)
    }
}

extension UIScreen {
    func contains(view: UIView) -> Bool {
        // Return true if `view` is being displayed in this screen instance.
    }
}

通过显示,我的意思是视图在视图层次结构中。或者,可以针对给定的视图控制器询问相同的问题,这也可以解决问题。

标签: iosuiviewuiscreen

解决方案


如果视图是 a 的后代UIWindow,则获取视图window,然后获取窗口screen,如下所示:

extension UIView {
    var screen: UIScreen? {
        window?.screen
    }
}

extension UIScreen {
    func contains(view: UIView) -> Bool {
        view.screen === self
    }
}

推荐阅读