导航栏显示/隐藏

我有一个由2个酒吧button组成的导航栏的应用程序。 我想隐藏和显示这个导航栏,当用户双击屏幕。

最初,导航栏应该隐藏起来。 当用户双击屏幕时,导航栏应该会出现一个animation,就像在iPhone的照片库中可以看到的一样。

我怎样才能做到这一点? build议总是赞赏。

这不是适合于几行代码的东西,但这是一种可能适用于您的方法。

要隐藏导航栏:

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

为了显示它:

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

这个方法的文档可以在这里find 。

要聆听“双击”或双击UIView子类,并为该视图控制器的view属性创build该子类的实例。

在视图子类中,重写它的-touchesEnded:withEvent:方法,并通过测量两个连续的水龙头之间的时间(可能是使用-timeIntervalSinceDate:来计算在一段时间内获得的触摸次数。 或者testing[touch tapCount]的结果。

如果你点击了两次,你的子视图会发出一个你的视图控制器已经注册过的NSNotification

当你的视图控制器听到通知,它会触发一个select器,隐藏或显示导航栏使用上述代码,根据导航栏的当前可见状态,通过阅读导航栏的isHidden属性访问。

编辑

处理tap事件的部分答案在iOS 3.1之前可能有用。 UIGestureRecognizer类可能是更好的处理双击的方法。

编辑2

Swift隐藏导航栏的方法是:

 self.navigationController?.setNavigationBarHidden(true, animated: true) 

为了显示它:

 self.navigationController?.setNavigationBarHidden(false, animated: true) 

这段代码将帮助你。

 UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showHideNavbar:)]; [self.view addGestureRecognizer:tapGesture]; -(void) showHideNavbar:(id) sender { // write code to show/hide nav bar here // check if the Navigation Bar is shown if (self.navigationController.navigationBar.hidden == NO) { // hide the Navigation Bar [self.navigationController setNavigationBarHidden:YES animated:YES]; } // if Navigation Bar is already hidden else if (self.navigationController.navigationBar.hidden == YES) { // Show the Navigation Bar [self.navigationController setNavigationBarHidden:NO animated:YES]; } } 

首先阅读iOS视图控制器编程指南中关于“对导航视图采用全屏布局”的部分以及关于自定义视图的相同部分。 如果您正在尝试执行类似于Photos.app的操作,那么您可能正在使用滚动视图。 请注意导航栏自动向滚动视图添加滚动内容插入的注释,以说明导航栏(和状态栏)的高度,因此您必须立即将滚动视图的contentInset属性重置为零(UIEdgeInsetsZero)设置navigationBar的初始状态,并在视图出现之前。

然后,如果您只需单击一次,即可切换导航栏和/或状态栏以显示或隐藏,则需要在切换方法中执行两项操作。 第一个似乎是在更改NavigationBar隐藏属性之前保存滚动视图的contentOffset属性,然后将保存的值恢复到contentOffset。 其次,在更改navigationBarHidden属性后,再将contentInset属性归零到UIEdgeInsetsZero。 另外,如果您正在切换状态栏,则需要在更改导航栏的状态之前更改其状态。

要隐藏导航栏:

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

显示导航栏:

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

Swift中试试这个,

 self.navigationController?.navigationBarHidden = true //Hide self.navigationController?.navigationBarHidden = false //Show 

要么

 self.navigationController?.setNavigationBarHidden(true, animated: true) //Hide self.navigationController?.setNavigationBarHidden(false, animated: true) //SHow 

这是一个非常快速和简单的解决scheme:

 self.navigationController.hidesBarsOnTap = YES; 

这将在单击而不是双击上工作。 即使在推送或popup当前视图控制器后,它也会改变导航控制器的行为。

如果您只想为单个视图控制器设置行为,则可以随时在viewWillAppear:和viewWillDisappear:actions中的控制器中修改此行为。

这里是文档 :

一种方法可能是通过取消选中栏可视性“显示导航栏”在属性检查器。希望这有助于某人。

在这里输入图像说明

SWIFT代码:这适用于iOS 3.2及更高版本。

  override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) let tapGesture = UITapGestureRecognizer(target: self, action: "hideNavBarOntap")let tapGesture = UITapGestureRecognizer(target: self, action: "hideNavBarOntap") tapGesture.delegate = self self.view.addGestureRecognizer(tapGesture) 

然后写

 func hideNavBarOntap() { if(self.navigationController?.navigationBar.hidden == false) { self.navigationController?.setNavigationBarHidden(true, animated: true) // hide nav bar is not hidden } else if(self.navigationController?.navigationBar.hidden == true) { self.navigationController?.setNavigationBarHidden(false, animated: true) // show nav bar } }