如何隐藏UINavigationBar但仍然向左滑动以自动返回手势?

时间:2015-03-22 07:57:18

标签: ios objective-c uinavigationcontroller uinavigationbar

我使用的是笔尖,而不是故事板。无论如何,我正在从一个视图控制器推送到下一个:

[self.navigationController pushViewController:vc animated:YES];

但是在下一个视图控制器" vc"上,我希望隐藏导航栏。但是,我仍然希望能够向左滑动以转到上一个屏幕,并且能够放置一个可以将用户带回来的后退按钮。

但是,当我在下一个视图控制器中执行此操作[self.navigationController setNavigationBarHidden:YES animated:animated];时,会隐藏导航栏,但您无法再滑动以导航回来。

如何使用此向后滑动功能,并将后退按钮放在屏幕上(只是没有导航栏?)

我试图模仿雅虎新闻摘要的行为 - 请注意它有导航按钮,然后滑动返回,但没有导航栏。此外,向下滚动时,后退按钮会消失。

我已经尝试使导航栏变得半透明,但是条形块会触及,这样用户就无法点击栏下的内容。有任何想法吗?谢谢!

enter image description here

3 个答案:

答案 0 :(得分:0)

你可以这样做,只需隐藏你的导航栏

[self.navigationController setNavigationBarHidden:YES animated:animated];

并添加Swipe Gesture以导航回到前一个视图

- (void)viewDidLoad
{
   [super viewDidLoad];

 //Add Swipe Gesture to navigate back to view
UISwipeGestureRecognizer *backtoview = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandler)];
[self.view addGestureRecognizer: backtoview];
}


-(void)swipeHandler{
   [self.navigationController popViewControllerAnimated:YES];
}

如果你想要方向,你可以添加滑动手势的方向,如果你想要按钮事件,那么添加自定义按钮并添加相同的方法到按钮动作

这会对你有帮助!

答案 1 :(得分:0)

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];    
    self.navigationController.navigationBar.alpha = 0;
}
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    self.navigationController.navigationBar.alpha = 1;
}

答案 2 :(得分:0)

快速

您可以使用以下方法隐藏navigationBar:

listViewScrollController.animateTo(listViewScrollController.position.maxScrollExtent)

启用InteractivePopGestureRecognizer documentation

self.navigationController?.navigationBar.isHidden = true
// or
self.navigationController?.setNavigationBarHidden(true, animated: true)

OR

添加EdgePanGestureRecognizer以识别左挥动,然后返回:

self.navigationController?.interactivePopGestureRecognizer?.delegate = self as! UIGestureRecognizerDelegate

// Enable gesture to pop the top view controller off the navigation stack
self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true

// Make an extension for your View Controller
extension MyViewController: UIGestureRecognizerDelegate {}