假设ViewController A 和 B 都被添加到navigationcontroller 栈中,顺序是A->B,A 页面隐藏导航条,B 页面显示导航条。
最简单实现是在 A 的 viewWillAppear 中隐藏navBar,在viewWillDisappear 中显示navBar,代码如下
- (void)viewWillAppear:(BOOL)animated
{
[superviewWillAppear:animated];
{
[superviewWillAppear:animated];
[self.navigationControllersetNavigationBarHidden:YESanimated:NO];
}
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
[self.navigationControllersetNavigationBarHidden:NOanimated:NO];
}
运行会出现pop回来navBar位置黑块问题,像下面这样,这个问题是隐藏navBar 时animation为NO导致的。
![](https://images2015.cnblogs.com/blog/589398/201608/589398-20160809105223449-1486573532.gif)
那么我们将animation 设置为YES,运行会发现在切换tab时又会出现抖动问题。
![](https://images2015.cnblogs.com/blog/589398/201608/589398-20160809105241543-2135693631.gif)
最终的解决方法是将animation 设置为当前调用的动画状态,就能解决上面两个问题
- (void)viewWillAppear:(BOOL)animated
{
[superviewWillAppear:animated];
{
[superviewWillAppear:animated];
[self.navigationControllersetNavigationBarHidden:YESanimated:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
[self.navigationControllersetNavigationBarHidden:NOanimated:animated];
}