以编程方式推送 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;
在 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;