Dou*_*ith 17 objective-c uinavigationbar uinavigationcontroller ios uistoryboardsegue
我在导航控制器中有视图控制器(root:RootViewController,second:)ReadingViewController,但在第二个视图控制器中我想禁用导航栏UIToolBar(因为我不需要标题,想要更多按钮,比如iBooks或者Facebook应用程序).问题是,当我在第二个视图中隐藏导航栏时,当我弹出视图控制器(返回)时,它会再次随机出现一秒钟.
当我弹出视图控制器时,后退按钮会出现一秒钟:

在第二个视图控制器中,我将导航栏隐藏在viewWillAppear::
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
同样在第二个视图控制器中,我恢复导航栏viewWillDisappear::
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// ... other stuff
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何解决这个问题,以便视图控制器无缝过渡.
mat*_*att 14
这里的问题是viewDidLoad太快了!请记住,viewDidLoad与界面和实际的推动动画没有任何关系.它并不意味着这个视图控制器的观点是即将出现在屏幕上!它仅意味着视图控制器已获得其视图.
我制作了一个视频,显示我的机器上发生了什么,因为我在导航界面中的两个视图控制器之间来回移动,其中一个显示导航栏,另一个不显示:http://youtu.be/PxpchytWQ4A
对我来说,这就像你在推动和弹出时显示和隐藏导航栏时所获得的那样连贯!这是我使用的代码.隐藏其导航栏的视图控制器属于ViewController2类.此代码位于app委托中:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
dispatch_async(dispatch_get_main_queue(), ^{
[(UINavigationController*)self.window.rootViewController setDelegate:self];
});
return YES;
}
-(void)navigationController:(UINavigationController *)nc
willShowViewController:(UIViewController *)vc
animated:(BOOL)animated
{
[nc setNavigationBarHidden:([vc isKindOfClass:[ViewController2 class]])
animated:animated];
}
Run Code Online (Sandbox Code Playgroud)
这就是我所做的一切.