如何隐藏导航栏而不会失去滑回功能

Zin*_*ing 24 xcode objective-c ios

我有一个UITableView,它有一个导航栏(来自UINavigationViewController),它可以通过用手指向后滑动返回.

我试图隐藏导航栏但保持滑回功能,代码:

- (void)viewWillAppear:(BOOL)animated {
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

这成功地隐藏了导航栏,但是,我也无法再滑回到最后一个屏幕.

有没有办法隐藏导航栏但保持滑回功能?

小智 54

如果你使用的话,用Swift 2测试@gabbler的解决方案

self.navigationController?.navigationBar.hidden = true
Run Code Online (Sandbox Code Playgroud)

Swift 3.0

self.navigationController?.navigationBar.isHidden = true
Run Code Online (Sandbox Code Playgroud)

代替

self.navigationController?.navigationBarHidden = true
Run Code Online (Sandbox Code Playgroud)

向后滑动手势就像一个魅力!

  • 请注意,在`viewWillAppear:`和`viewWillDisappear:`中将其设置为系统平滑**,以在`UINavigationController`中的特定`UIViewController`中禁用`UINavigationBar`可能是一个非常好的挑战,特别是在做的时候`viewWillDisappear:`.对于那种特殊情况,我们使用`setNavigationBarHidden:animated:`但这也禁用了`interactivePopGestureRecognizer`.在我的特殊情况下,我不做这个答案所说的,因为动画这个属性很难并且非常多. (2认同)

Zin*_*ing 21

找到解决方案:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    // hide nav bar
    [[self navigationController] setNavigationBarHidden:YES animated:YES];

    // enable slide-back
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
        self.navigationController.interactivePopGestureRecognizer.delegate = self;
    }
}


- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

在.h文件中,符合UIGestureRecognizerDelegate


gab*_*ler 7

使用

self.navigationController.navigationBar.hidden = YES;
Run Code Online (Sandbox Code Playgroud)

或者在viewWillAppear中添加以下行:

self.navigationController.interactivePopGestureRecognizer.delegate = self;
Run Code Online (Sandbox Code Playgroud)

似乎交互无效,添加此行并使视图控制器符合UIGestureRecognizerDelegate协议将使其工作.