Как узнать, на каком UIScreen отображается данный вид? - PullRequest
0 голосов
/ 07 января 2020

Использование UIScreen на iOS не очень распространено (полезно для проверки масштаба и черт). UIScreen.main упрощает доступ к этим свойствам при необходимости.

Наличие нескольких экранов на iOS определенно менее распространено, но возможно с AirPlay и, на iPad с USB- C, внешними мониторами. Список экземпляров экрана доступен в 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.
    }
}

Под отображением я имею в виду представление в иерархии представлений. Кроме того, тот же вопрос можно задать для данного контроллера представления, что также решит проблему.

1 Ответ

1 голос
/ 07 января 2020

Если представление является потомком UIWindow, получите представление window, а затем получите screen окна, например:

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

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