У меня есть UITabBarController с 4 настройками viewControllers.
На одном из контроллеров есть кнопка, представляющая другой контроллер (обернутый в UINavigationController) со следующей настройкой:
self.definesPresentationContext = true
navController.modalPresentationStyle = .overCurrentContext
navController.modalTransitionStyle = .crossDissolve
self.present(navController, animated: true)
До этого момента работает нормально.
Теперь, если я переключаюсь на другую вкладку (пока открыт предыдущий модальный) и снова возвращаюсь на вкладку, которая представляла модальный (экран все еще там, это нормально). Затем, если я закрою модальное окно (с помощью кнопки), модальное окно будет отклонено, но представление контроллера исчезло (белый), тогда, если я переключусь на другую вкладку и снова вернусь на вкладку, представление загрузится правильно.
Примечание: в этом случае мне нужен overCurrentContext, я не хочу блокировать UITabBarController (с fullScreen). Также попробуйте с .currentContext, custom
@matt на самом деле читал вашу книгу (я принял ее за coobook :) и ждал ответа) .. Спасибо за комментарий. Любая идея?
Если это та же ошибка, я предлагаю свой обходной путь, который заключается в том, чтобы помешать пользователю сделать это, т.е.пользователь не могу переключается на другую вкладку, пока модальное окно открыто. См. github.com/mattneub/Programming-iOS-Book-Examples/blob/maste r /…
@matt Выберите правильный ответ, чтобы упомянуть, что это известная ошибка. В моем случае я не могу заставить TabBar (из-за UX) переключиться. В качестве обходного пути я сделал следующее: отклонил представленный контроллер, когда вкладка переключена, а modalPresentationStyle имеет значение .overCurrentContext.
Очевидно, это тоже хорошо! В равной степени верно. Вы можете дать это как альтернативный ответ для протокола.





Если это та же ошибка, которую я демонстрирую здесь, я предлагаю обходной путь, чтобы запретить пользователю переключаться на другую вкладку, пока эта вкладка показывает представленный контроллер представления:
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
}
extension FirstViewController : UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
return self.presentedViewController == nil
}
}
Я считаю, что это хорошо известная ошибка.