最近遇到在写导航条的显示与隐藏,界面A没有导航条,需要push出一个带导航的界面B。
代码就是在navigationViewController.m文件实现UINavigationControllerDelegate的
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[self setNavigationBarHidden:[self isNeedHidden] animated:YES];
}
其中isNeedHidden方法的逻辑参照需要自己处理。
这里就可以实现导航条的显示与隐藏了,但是我这里稍微特殊的是界面A的状态栏是白色,界面B的状态栏是黑色,所以在界面A的.m文件中设置了方法
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
单单这样设置就可以完成所需要的效果,但是在手势返回界面A的时候,如果快速滑动一小段距离后取消掉返回手势,当前的页面的状态栏就会出现隐藏掉的BUG。
后来发现原来是设置状态栏的问题,最后在Nav中添加了
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
- (UIViewController *)childViewControllerForStatusBarStyle
{
if (需要显示为白色状态栏)
{
return self.topViewController;
}
return [super childViewControllerForStatusBarStyle];
}
这样就完美的解决了问题。