以编程方式推送 UINavigationController 后顶部栏不可见

top bar not visible after programmatically pushing UINavigationController

在 AppDelegate 中,我检查是否有用户存在,如果有我 "skip" 两个 ViewControllers 通过使用此代码推送 NavigationController:

if(currentUser){

    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"Test"];

    self.window.rootViewController = viewController;
    viewController.navigationController.navigationBarHidden = NO; // Tried this nothing happened.
    [self.window makeKeyAndVisible];

}
else{
    [PFUser enableAutomaticUser];
    [[PFUser currentUser] incrementKey:@"RunCount"];
    [[PFUser currentUser] saveInBackground];
    [[PFUser currentUser] fetch];


    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    UINavigationController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"firstView"];

    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];

}

所以真正的语句跳过了两个ViewControllers并推送了UINavigationController。但是当它以这种方式显示时,没有顶部栏。

但是,如果没有用户,那么它会以 "normal" 方式通过 segues 进入 UINavigationController,然后该栏可见。

我该如何解决这个问题?

谢谢!

"So the true statement skips two ViewControllers and push the UINavigationController." 不,不是。首先你没有推动任何东西,你正在设置 window 的根视图控制器。其次,您还没有创建任何导航控制器,您只创建了 viewController.

如果 viewController 在故事板中有一个导航控制器,那么您应该实例化导航控制器(这将依次实例化 viewController),并将其设为 window的根视图控制器。

我觉得你应该设置一个 UINavigationController 到 rootviewController ,会有一个导航栏。所以你也可以把firstView设置为rootViewController,但是设置viewcontrollers属性把在viewcontrollers.

之前清除的Testviewcontroller
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"
 bundle:nil];
    UIViewController *viewController = [storyboard 
instantiateViewControllerWithIdentifier:@"Test"];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
    self.window.rootViewController = nav;