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
}
}
0
这段代码可以帮到你 .
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];
}
}
9 回答
首先阅读“适用于iOS的View Controller编程指南”中有关“采用导航视图的全屏布局”的部分以及关于自定义视图的相关部分 . 如果您尝试执行类似Photos.app的操作,那么您可能正在使用滚动视图 . 请注意导航栏自动将滚动内容插入添加到滚动视图的注释,以考虑导航栏(和状态栏)的高度,因此您必须立即将滚动视图的contentInset属性重置为零(UIEdgeInsetsZero)设置navigationBar的初始状态并在视图出现之前 .
然后,如果您只需点击一下切换导航栏和/或状态栏以显示或隐藏,您需要在切换方法中执行两项操作 . 第一个似乎是在更改NavigationBar隐藏属性之前保存滚动视图的contentOffset属性,然后将保存的值恢复到contentOffset . 第二,在更改navigationBarHidden属性后再次将contentInset属性清零为UIEdgeInsetsZero . 此外,如果要切换状态栏,则需要在更改navigationBar的状态之前更改其状态 .
这不是适合几行代码的东西,但这是一种可能适合您的方法 .
要隐藏导航栏:
要表明:
此方法的文档是available here .
要监听"double click"或双击,子类
UIView
并将该子类的实例作为视图控制器的view
属性 .在视图子类中,覆盖其-touchesEnded:withEvent:方法并计算在一段时间内获得的触摸次数,方法是测量两次连续点击之间的时间,可能是-timeIntervalSinceDate: . 或者测试[touch tapCount]的结果 .
如果您获得两次点击,您的子视图会发出视图控制器已注册要监听的NSNotification .
当您的视图控制器听到通知时,它会触发一个选择器,该选择器使用上述代码隐藏或显示导航栏,具体取决于导航栏's current visible state, accessed through reading the navigation bar' s isHidden属性 .
EDIT
处理点击事件的答案部分可能在iOS 3.1之前有用 . 如今,UIGestureRecognizer类可能是处理双击的更好方法 .
EDIT 2
Swift隐藏导航栏的方法是:
要表明:
在 Swift 尝试这个,
要么
一种方法是在属性检查器中取消选中Bar Visibility“显示导航栏” . 希望这可以帮助某人 .
要隐藏导航栏:
要显示导航栏:
在UINavigationController属性上
hidesBarsOnTap
用iOS8 SDK来处理这个问题https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UINavigationController_Class/#//apple_ref/occ/instp/UINavigationController/hidesBarsOnTap
这是一个非常快速和简单的解决方案:
这将适用于单击而非双击 . 即使在按下或弹出当前视图控制器之后,它也会改变导航控制器的行为 .
如果您只想为单个视图控制器设置行为,则可以在viewWillAppear:和viewWillDisappear:actions中的控制器中修改此行为 .
这是documentation:
SWIFT CODE:适用于iOS 3.2及更高版本 .
然后写
这段代码可以帮到你 .