【问题标题】:top bar not visible after programmatically pushing UINavigationController以编程方式推送 UINavigationController 后顶部栏不可见
【发布时间】:2015-01-23 01:40:51
【问题描述】:

在 AppDelegate 中,我检查是否存在用户,如果存在,我通过使用以下代码推送 NavigationController 来“跳过”两个 ViewController:

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];

}

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

但是,如果没有用户,那么它将通过 segues 以“正常”方式进入 UINavigationController,然后该栏是可见的。

我该如何解决这个问题?

谢谢!

【问题讨论】:

    标签: ios objective-c iphone uinavigationcontroller uinavigationbar


    【解决方案1】:
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"
     bundle:nil];
        UIViewController *viewController = [storyboard 
    instantiateViewControllerWithIdentifier:@"Test"];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
        self.window.rootViewController = nav;
    

    【讨论】:

      【解决方案2】:

      “所以真正的语句跳过两个 ViewController 并推送 UINavigationController。”不,它没有。首先你没有推送任何东西,你正在设置窗口的根视图控制器。其次,您还没有创建任何导航控制器,您只是创建了 viewController。

      如果 viewController 在情节提要中有一个导航控制器,那么您应该实例化导航控制器(这反过来又会实例化 viewController),并使其成为窗口的根视图控制器。

      【讨论】:

      • 我猜你说的是 William Hu 所说的话,所以我不接受他的回答,因为他提供的代码让其他人更容易。谢谢你说清楚。
      【解决方案3】:

      我认为你应该设置一个 UINavigationController 到 rootviewController ,会有一个导航栏。所以你也可以将firstView设置为rootViewController,但是设置viewcontrollers属性把Test viewcontroller放在viewcontrollers之前清空。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多