前言:当你想在一个没有导航条的页面push到一个有导航条的页面的时候,你是否试过去隐藏前一个页面的导航条,然后push后再显示?然后看起来很有闪烁感。这里就教你如何用系统的api去完成这件事.
一、初始化一个带Navigation的控制器
此处不多讲,我用个故事板简单的建立一个,如下图:
从此图可以看出,一个带导航条的控制器,里面有一个push的按钮,等下通过代码,隐藏首页的导航图.
二、首先设置代理为第一个控制器,也就是首页
1
2
3
4
|
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.delegate = self;
}
|
三、对导航栏隐藏显示作处理
1
2
3
4
5
6
7
|
- (
void
)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(
BOOL
)animated {
if
([viewController isKindOfClass:[self
class
]]) {
[navigationController setNavigationBarHidden:YES animated:YES];
}
else
{
[navigationController setNavigationBarHidden:NO animated:YES];
}
}
|
你可以通过判断,你即将显示的是哪个控制器来显示还是隐藏导航栏。只需要判断显示的控制器是哪个类即可。有一点要注意的就是,此代理方法
1
|
willShowViewController
|
要跟didShow区分开来,当然你也可以去尝试一下didShow的效果。
四、效果
五、Demo地址
https://github.com/zhiwupei/NavigationBaDemo/tree/master