iOS 13 В панели вкладок дочернего представления контроллера viewWillAppear не вызывается - PullRequest
2 голосов
/ 09 октября 2019

У меня есть контроллер панели вкладок, и я добавил в него пять контроллеров представления, например:

class InfluencerMainTabBarController: UITabBarController {
override func viewDidLoad() {
    super.viewDidLoad()

    let findWorkVC = UINavigationController.init(rootViewController: InfluencerFindWorkVC.instantiate(fromAppStoryboard: .Influencer))
    findWorkVC.tabBarItem = UITabBarItem(title: nil, image: #imageLiteral(resourceName: "ic_home"), tag: 0)

    let inboxVC = UINavigationController.init(rootViewController: InfluencerInboxVC.instantiate(fromAppStoryboard: .Inbox))
    inboxVC.tabBarItem = UITabBarItem(title: nil, image: #imageLiteral(resourceName: "ic_inbox"), tag: 1)

    let workDiaryVC = UINavigationController.init(rootViewController: InfluencerWorkDiaryVC.instantiate(fromAppStoryboard: .Influencer))
    workDiaryVC.tabBarItem = UITabBarItem(title: nil, image: #imageLiteral(resourceName: "ic_work"), tag: 2)

    let notificationsVC = InfluencerNotificationsVC.instantiate(fromAppStoryboard: .Influencer)
    notificationsVC.tabBarItem = UITabBarItem(title: nil, image: #imageLiteral(resourceName: "ic_notification"), tag: 3)

    let accountVC = InfluencerProfileVC.instantiate(fromAppStoryboard: .Influencer)
    accountVC.tabBarItem = UITabBarItem(title: nil, image: #imageLiteral(resourceName: "ic_profile"), tag: 4)

    let tabBarList = [findWorkVC, inboxVC, workDiaryVC, notificationsVC, accountVC]

    viewControllers = tabBarList

    self.tabBar.tintColor = UIColor.appPurpleColor
    self.tabBar.barTintColor = UIColor.white
}
}

Проблема в моем первом контроллере, findWorkVC , его viewWillAppear получаетвызывается, но когда я нажимаю на любой другой контроллер представления, их viewWillAppear не вызывается.

Он отлично работает до устройств с iOS 13, но на iOS 13 его не только вызывают, но и высота панели навигации меньшечем высота панели навигации iOS 12, вы можете видеть, что заголовок в панели навигации просто перекрывает текст строки состояния.

enter image description here

1 Ответ

1 голос
/ 10 октября 2019

Я создал новый проект и протестировал все, просматривал контроллеры с вкладками, там все работало, но не в моем проекте, поэтому я начал искать вещи, которые отличались в моем проекте от нового проекта.

Оказывается, это был контроллер корневого представления. Я устанавливал корневой контроллер вида таким образом с анимацией

let controller = InfluencerMainTabBarController.instantiate(fromAppStoryboard: .Main)

UIView.transition(from: self.view, to: controller.view, duration: 0.6, options: [.transitionFlipFromTop], completion: { completed in
     UIApplication.shared.keyWindow?.rootViewController = controller
})

Поэтому я просто представил контроллер представления с modalPresentationStyle = .fullScreen без анимации, и все заработало.

let controller = InfluencerMainTabBarController.instantiate(fromAppStoryboard: .Main)
controller.modalPresentationStyle = .fullScreen
DispatchQueue.main.async { UIApplication.shared.keyWindow?.rootViewController = controller }

Теперь мне нужно толькоПосмотрите, как установить корневой контроллер представления с анимацией. : |

...