从代码中呈现 tabBarController 会删除导航栏按钮和标题

Presenting a tabBarController from code removes the navigation bar buttons and title

我正在尝试在应用程序启动时使用代码(不是故事板转场)呈现 tabBarController。如果用户已注册,应用程序应在 tabBarVC 上打开,如果用户需要 signup/login,则显示登录 VC。我在 didFinishLaunchingWithOptions:

中调用它
if currentUser != nil {

    initialVC("tabBarVC")

} else {

    initialVC("loginVC")

}

初始VC函数是:

func initialVC(storyboardID: String) {

    let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let initialViewController : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("\(storyboardID)") as UIViewController
    let navController = UINavigationController(rootViewController: initialViewController)
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window?.rootViewController = navController
    self.window?.makeKeyAndVisible()

}

显示 tabBarViewController 时,导航栏按钮和标题不显示。如果我直接转至 tabBarController 中的 VC,则导航栏会正确显示,但不会按预期显示选项卡栏。 如何显示 tabBarVC 并使导航栏正确显示?

检查几点:

1) 也许您对导航栏的设置是中性的(右侧的顶部栏下拉菜单)

2) 如果第 1 步不起作用,请尝试将 navigationItem 手动插入 viewController:

首先,如果您使用的是 UITabBarController,您应该直接初始化它的 属性 viewControllers
其次,您不应该将所有控制器向下转换为它的基类型。
第三,可能你可以使用这样的方案:Navigation(always root) - Initial Controller,如果没有登录你推送Login View controller

我试图用 navController 呈现 tabBarController。我最终使用的代码有效

didFinishLaunchingWithOptions中:

if currentUser != nil {

    initialVC("tabBarVC")

} else {

    initialVC("loginVC")

}

函数:

func initialVC(storyboardID: String) {

    let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let initialViewController : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("\(storyboardID)") as UIViewController
    self.window?.makeKeyAndVisible()

    if storyboardID == "tabBarVC" {

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.rootViewController = initialViewController

    } else {

        let navController = UINavigationController(rootViewController: initialViewController)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.rootViewController = navController

    } 
}