Внешние дисплеи в публикации iOS 13

В iOS 13 установщик для screen устарел, и там не так много документации, в которой говорится, какой должна быть альтернатива. Я просмотрел другие сообщения о переполнении стека, такие как этот но код не работает в моем приложении. Это функция, которую я использую в моем контроллере представления для настройки внешних дисплеев, которая работает, но предупреждает меня, что установщик для экрана устарел. Он вызывается функцией viewDidLoad() моего ViewController.

Переменные, инициализированные в моем ViewController

    // External Display Support
    var secondWindow: UIWindow?
    var secondScreenView: UIView?

Функция подключения и отображения на внешний экран.

    @objc func setupScreen() {
        if UIScreen.screens.count > 1 {
            // Find and store the second screen
            let secondScreen = UIScreen.screens[1]
            
            // Create a local variable to store the second window using the screen's dimensions
            let externalWindow = UIWindow(frame: secondScreen.bounds)
            
            // Windows require a root view controller
            let viewController = UIViewController()
            
            // Tell the window which screen to use
            externalWindow.screen = secondScreen // This is where the deprecation error is
            
            // Set the dimensions for the view for the external screen so it fills the screen
            secondScreenView = UIView(frame: externalWindow.frame)
            
            // Add the view to the window
            externalWindow.addSubview(secondScreenView)
            
            // Unhinde the window
            externalWindow.isHidden = false
            
            // Configure the View
            let hostingController = HostingControllerPresentable(rootView: DefaultPresentationView(appIcon: Bundle.main.icon ?? UIImage()))
            
            viewController.addChild(hostingController)
            viewController.view.addSubview(hostingController.view)
            hostingController.view.translatesAutoresizingMaskIntoConstraints = false
            
            NSLayoutConstraint.activate([
                hostingController.view.topAnchor.constraint(equalTo: (viewController.view.topAnchor)),
                hostingController.view.bottomAnchor.constraint(equalTo: (viewController.view.bottomAnchor)),
                hostingController.view.leadingAnchor.constraint(equalTo: (viewController.view.leadingAnchor)),
                hostingController.view.trailingAnchor.constraint(equalTo: (viewController.view.trailingAnchor)),
            ])
            
            hostingController.didMove(toParent: externalWindow.rootViewController)
            secondWindow = externalWindow
            externalWindow.rootViewController = viewController
        }
    }

Что заменяет этот сеттер и как мне обновить код, чтобы это работало?


person JoshHolme    schedule 02.03.2021    source источник
comment
Вы внедрили делегата сцены в свое приложение? В таком случае вы назначаете внешний экран свойству screen соответствующего UIWindowScene. Если вы не приняли подход делегата сцены, используйте имеющийся у вас код и игнорируйте предупреждение об устаревании.   -  person Paulw11    schedule 02.03.2021
comment
Мы не приняли делегата от сцены. Тогда нам придется подумать о том, чтобы принять это. Спасибо за разъяснения и информацию!   -  person JoshHolme    schedule 02.03.2021