如何隐藏导航栏,而不会失去滑动function
我有一个UITableView,它有一个导航栏(从UINavigationViewController获得),它可以通过用手指滑回去。
我试图隐藏导航栏,但保持滑动function,代码:
- (void)viewWillAppear:(BOOL)animated { [[self navigationController] setNavigationBarHidden:YES animated:YES]; }
这成功地隐藏了导航栏,但是,我不能再滑回到最后一个屏幕。
有什么办法可以隐藏导航栏,但保持滑动的能力?
如果你使用的话,用Swift 2testing@ gabbler的解决scheme
self.navigationController?.navigationBar.hidden = true
Swift 3.0
self.navigationController?.navigationBar.isHidden = true
代替
self.navigationController?.navigationBarHidden = true
滑回手势就像一个魅力!
find解决办法:
- (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; }
在.h文件中,符合UIGestureRecognizerDelegate
使用
self.navigationController.navigationBar.hidden = YES;
或者在viewWillAppear中添加这一行:
self.navigationController.interactivePopGestureRecognizer.delegate = self;
看来交互效果不佳,添加这一行,并使视图控制器符合UIGestureRecognizerDelegate协议将使其工作。
确保包括:
self.navigationController.navigationBar.hidden = YES;
和:
self.navigationController.interactivePopGestureRecognizer.delegate = self;
和:
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = YES; }
它应该是这样的:
- (void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden = YES; self.navigationController.interactivePopGestureRecognizer.delegate = self; if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = YES; } } - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { return YES; }
对于Xamarinforms我是奋斗与此,所以首先不NavigationRenderer你会得到NavigationController null而不是使用PageRenderer:
[assembly: Xamarin.Forms.ExportRenderer(typeof(ContentPage), typeof(ContentPageRenderer))] namespace sample { class ContentPageRenderer : PageRenderer { public override void ViewWillAppear(bool animated) { base.ViewDidAppear(animated); var navctrl = this.ViewController.NavigationController; navctrl.InteractivePopGestureRecognizer.Delegate = new UIGestureRecognizerDelegate(); navctrl.InteractivePopGestureRecognizer.Enabled = true; } } }
如果隐藏导航栏没有帮助,请尝试更改导航栏的矩形并查看?
navBarBgFrame.origin.y = – navBarBgFrame.size.height;