UITabBarController没有加载标签的UINavigationController标题

时间:2018-06-01 15:31:06

标签: ios swift uinavigationcontroller uitabbarcontroller

我遇到的问题是我的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中,它仍然是空白的。

任何帮助将不胜感激。谢谢!

编辑:删除动画可以按预期加载所有内容。

0 个答案:

没有答案