我有一个选项卡栏 Controller ,并且在其中添加了五个 View Controller ,如下所示:
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
}
}
问题是我的第一个 Controller ,即 findWorkVC,它的 viewWillAppear 被调用,但是当我单击任何其他 View Controller 时,它们的 viewWillAppear 没有被调用。
它在 iOS 13 设备上运行良好,但在 iOS 13 上它不仅被调用,而且导航栏的高度小于 iOS 12 的导航栏高度,您可以看到导航栏中的标题恰好与状态栏重叠文本。
最佳答案
我创建了一个新项目并测试了所有内容,使用选项卡查看 Controller ,所有内容都在那里工作,但不在我的项目中,所以我开始寻找我的项目中与新创建的项目不同的东西。
事实证明,它是 Root View Controller 。我正在像这样用动画设置 Root View Controller
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
呈现 View Controller ,没有动画,一切正常。
let controller = InfluencerMainTabBarController.instantiate(fromAppStoryboard: .Main)
controller.modalPresentationStyle = .fullScreen
DispatchQueue.main.async { UIApplication.shared.keyWindow?.rootViewController = controller }
现在我只需要寻找如何使用动画设置 Root View Controller 。 :|
关于iOS 13 在选项卡栏 subview Controller viewWillAppear 不被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58307887/