У меня есть пользовательская UIStoryboardSegue, которая работает как нужно в iOS12. *.
Одним из целевых контроллеров представления является UITabbarController: для каждой вкладки у меня есть контроллер, встроенный в контроллер навигации.
К сожалению, для iOS13. * Это работает не очень хорошо (см. Экран ниже), так как разрушает поведение и визуальный образ VC, и больше не вызывает viewXXXAppear ().
Мне пришлось убрать волосы, но, как вы видите, я нашел исправление, которое я обнародовал (мне пришлось добавить контроллер навигации на лету).
Но есть ли у вас лучшее решение?
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()
}
}
}
}