我遇到的问题是我的UITabBarController在某些情况下没有加载标签的UINavigationController的标题。以下是我将标签添加到tabBar的方法:
private func setup(_ tabBarItem: UITabBarItem, imageName: String, tagNumber: Int, name: String) {
tabBarItem.tag = tagNumber
tabBarItem.title = name
tabBarItem.image = UIImage(named: imageName)
tabBarItem.selectedImage = UIImage(named: imageName + "-fill")
}
private func build() {
let inboxVCNavController = UINavigationController(rootViewController: InboxViewController())
let exploreViewController = UIViewController()
let cameraPlaceHolder = UIViewController()
let profileVCNavController = UINavigationController(rootViewController: ProfileViewController())
let notificationsVCNavController = UINavigationController(rootViewController: NotificationsViewController())
setup(inboxVCNavController.tabBarItem, imageName: "", tagNumber: 0, name: "Inbox")
setup(exploreViewController.tabBarItem, imageName: "", tagNumber: 1, name: "Explore")
setup(cameraPlaceHolder.tabBarItem, imageName: "", tagNumber: 2, name: "Camera")
setup(profileVCNavController.tabBarItem, imageName: "", tagNumber: 3, name: "Profile")
setup(notificationsVCNavController.tabBarItem, imageName: "", tagNumber: 4, name: "Notifications")
viewControllers = [inboxVCNavController, exploreViewController, cameraPlaceHolder, profileVCNavController, notificationsVCNavController]
selectedViewController = inboxVCNavController
}
当我从LoginVC转换到TabBarController时,初始VC(inboxVCNavController)加载正常,但其他VC(profileVCNavController和notificationVCNavController)不显示其标题。以下是我从LoginVC过渡到TabBar的方法:
private func transitionToHome() {
view.endEditing(true)
let vc = TabBarController()
present(vc, animated: true) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = vc
appDelegate.window?.makeKeyAndVisible()
}
}
为了让事情变得更奇怪,当用户已经登录时,我直接从AppDelegate进入TabBarController。当发生这种情况时,它会正确加载所有VC的NavigationController内容。代码几乎相同:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarStyle = .lightContent
registerForPushNotifications()
if (getSessionToken() != nil) {
window?.rootViewController = TabBarController()
return true
}
let sb = UIStoryboard(name: "Login", bundle: nil)
window?.rootViewController = sb.instantiateInitialViewController()
return true
}
看起来VC运行ViewDidLoad(这是我设置VC的标题),即使它没有出现。此外,我检查了“didSet”的NavigationControllers“title”属性,看起来它们在加载时似乎已正确设置。最后,即使尝试在“viewDidAppear”中设置标题也不会导致标题出现在navigationController中,它仍然是空白的。
任何帮助将不胜感激。谢谢!
编辑:删除动画可以按预期加载所有内容。