您的当前位置:首页正文

iOS之隐藏导航栏后返回手势失效解决办法

来源:要发发知识网

在实际的项目中,遇到过个情况就是一个界面push到下个界面,但是下个界面需要隐藏掉导航栏。第二个界面的导航栏隐藏掉过后,iOS7之后的左划pop到上个界面的手势不能正常使用。下面就简单介绍下我的解决这个问题的思路。

  • 注:
  • V1是控制器1
  • V2是V1 push后的控制器2
  • V3是V1 push后的控制器3

1.隐藏导航栏

方法1:

隐藏导航栏有很多种做法,
[self.navigationController setNavigationBarHidden:YES animated:animated];
在V2的viewWillAppear中实现。
如若要展示导航栏:
[self.navigationController setNavigationBarHidden:NO animated:animated];
在V2的viewDidDisappear中实现。

方法2:

我们push后的界面是需要隐藏导航栏,但是导航栏依然是存在的。
我们在V2的viewDidLoad中实现导航栏的代理:
self.navigationController.delegate = self;
并在该控制器中遵守相应的UINavigationControllerDelegate协议。
下面就需要实现相关的协议:

#pragma mark - 导航栏的代理
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    // 判断要显示的控制器是否是自己
    BOOL isPushSelfClass = [viewController isKindOfClass:[self class]];
    [self.navigationController setNavigationBarHidden:isPushSelfClass animated:animated];
}

这里就是判断如果是本个类就需要隐藏导航栏,如果不是则不需要。
这样以上的方法就可以进行隐藏导航栏了。

2.pop返回到上一个界面