美文网首页iOS技术交流收藏
iOS之隐藏导航栏后返回手势失效解决办法

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

作者: 请输入账号名 | 来源:发表于2017-02-08 11:12 被阅读581次

    在实际的项目中,遇到过个情况就是一个界面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返回到上一个界面

    当V1push到V2界面的时候,导航栏已经被隐藏掉了,相应的pop手势也失效了,下面就需要解决下这个问题。
    一行代码即可,
    self.navigationController.interactivePopGestureRecognizer.delegate = self;
    依然需要遵守相应的协议UIGestureRecognizerDelegate
    这样一来就可以进行pop到上个界面了。
    但是我发现到假如V3界面没有设置隐藏导航栏,这个界面的pop依然失效了,而返回按钮依然可以使用,这样的情况只要像V2界面那样加上以上的代码就可以使得手势恢复。
    self.navigationController.interactivePopGestureRecognizer.delegate = self;
    如果是正常可以进行pop返回的话,则可以不用写上述的代码。
    下面是相关的demo
    在模拟器运行的话可能效果不是很好,>>可能我是手残>>,最好用真机运行,手势效果可能比较好。
    如果有什么不对的地方也请留言指正下,谢谢。

    相关文章

      网友评论

      本文标题:iOS之隐藏导航栏后返回手势失效解决办法

      本文链接:https://www.haomeiwen.com/subject/ywsvittx.html