我在导航控制器中有视图控制器(根:RootViewController
, 第二:ReadingViewController
),但在第二个视图控制器中我想禁用导航栏UIToolBar
(因为我不需要标题并想要更多按钮,例如 iBooks 或 Facebook 应用程序中的按钮)。问题是,当我在第二个视图中隐藏导航栏时,当我弹出视图控制器(返回)时,它会再次随机出现一秒钟。
当我弹出视图控制器时,后退按钮会出现一秒钟:
在第二个视图控制器中,我将导航栏隐藏在viewWillAppear:
:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
同样在第二个视图控制器中,我恢复了导航栏viewWillDisappear:
:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// ... other stuff
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
我想知道如何解决这个问题,以便视图控制器无缝过渡。
这里的问题是viewDidLoad
太快了!记住,viewDidLoad
没有任何关系界面和实际的推送动画。确实如此not意味着该视图控制器的视图即将出现在屏幕上!它仅仅意味着视图控制器已经获得了它的视图。
我制作了一个视频,展示了当我在导航界面中的两个视图控制器之间来回移动时,我的机器上发生的情况,其中一个显示导航栏,另一个不显示:http://youtu.be/PxpchytWQ4A http://youtu.be/PxpchytWQ4A
对我来说,这与您在按下和弹出时显示和隐藏导航栏时所获得的连贯性一样!这是我使用的代码。隐藏导航栏的视图控制器属于 ViewController2 类。此代码位于应用程序委托中:
- (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];
}
这就是我所做的一切。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)