Почему мне нужно вставить невидимый UINavigationController в мой пользовательский UIStoryboardSegue в iOS13? - PullRequest
0 голосов
/ 13 октября 2019

У меня есть пользовательская UIStoryboardSegue, которая работает как нужно в iOS12. *.

Одним из целевых контроллеров представления является UITabbarController: для каждой вкладки у меня есть контроллер, встроенный в контроллер навигации.

К сожалению, для iOS13. * Это работает не очень хорошо (см. Экран ниже), так как разрушает поведение и визуальный образ VC, и больше не вызывает viewXXXAppear ().

Мне пришлось убрать волосы, но, как вы видите, я нашел исправление, которое я обнародовал (мне пришлось добавить контроллер навигации на лету).

Но есть ли у вас лучшее решение?

enter image description here

public class AladdinReplaceRootViewControllerSegue: UIStoryboardSegue {
    override public func perform() {

        if let window = UIApplication.shared.keyWindow,
            let sourceView = source.view,
            let destinationView = destination.view {

            let screenWidth  = UIScreen.main.bounds.size.width
            let screenHeight = UIScreen.main.bounds.size.height

            destinationView.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight)

            window.insertSubview(destinationView, aboveSubview: sourceView)

                guard let window = UIApplication.shared.delegate?.window as? UIWindow else {
                    return
                }
                // **My fix**
                if #available(iOS 13,*) {
                    // I introduced an invisible navigation controller starting in iOS13 otherwise, my controller attached to the tabbar thru a navigation, dont work correctly, no viewXAppearis called.
                    let navigationController = UINavigationController.init(rootViewController: self.destination)
                    navigationController.isNavigationBarHidden = true
                    window.rootViewController = navigationController
                }
                else {
                    window.rootViewController = self.destination
                }

                window.makeKeyAndVisible()
            }
        }
    }
}
...