Представить ViewController поверх всего, независимо от иерархии представлений в IOS 13

В iOS 13 появилось новое поведение для контроллера модального представления при его представлении. Теперь по умолчанию это не полноэкранный режим, и когда я пытаюсь изменить modalPresentationStyle на .fullScreen, мое представление отображается и немедленно закрывается. Я представляю контроллер представления с кодом:

 if #available(iOS 13.0, *) {

        var popupWindow: UIWindow?

        let windowScene = UIApplication.shared
            .connectedScenes
            .filter { $0.activationState == .foregroundActive }
            .first
        if let windowScene = windowScene as? UIWindowScene {
            popupWindow = UIWindow(windowScene: windowScene)
        }

        let vc = UIViewController()
        vc.view.frame = UIScreen.main.bounds

        popupWindow?.frame = UIScreen.main.bounds
        popupWindow?.backgroundColor = .clear
        popupWindow?.windowLevel = UIWindow.Level.statusBar + 1
        popupWindow?.rootViewController = vc
        popupWindow?.makeKeyAndVisible()
        popupWindow?.rootViewController?.present(self, animated: true, completion: nil)
}

person Son Pham    schedule 09.10.2019    source источник
comment
Почему вы создаете новое окно только для того, чтобы показать контроллер представления? Этот инициализатор UIWindow недействителен в iOS 13.   -  person rmaddy    schedule 09.10.2019
comment
Как я могу представить свой контроллер представления сверху, iOS 12, я использую UIWindow, и он работает нормально, но что мне делать в iOS 13?   -  person Son Pham    schedule 09.10.2019
comment
Просто представьте контроллер представления из текущего самого верхнего контроллера представления. Это будет работать с любой версией iOS. Никакого дополнительного окна не требуется.   -  person rmaddy    schedule 09.10.2019


Ответы (1)


Я нашел решение:

if #available(iOS 13.0, *) {
     if var topController = UIApplication.shared.keyWindow?.rootViewController  {
           while let presentedViewController = topController.presentedViewController {
                 topController = presentedViewController
                }
     self.modalPresentationStyle = .fullScreen
     topController.present(self, animated: true, completion: nil)
}
person Son Pham    schedule 09.10.2019