Answers:
这不是适合几行代码的内容,但这是一种可能对您有用的方法。
隐藏导航栏:
[[self navigationController] setNavigationBarHidden:YES animated:YES];
要显示它:
[[self navigationController] setNavigationBarHidden:NO animated:YES];
有关此方法的文档,请参见此处。
要侦听“双击”或双击,请子类化UIView
并创建该子类的实例作为视图控制器的view
属性。
在view子类中,-touchesEnded:withEvent:
通过测量两次连续点击之间的时间(也许使用),覆盖其方法并计算在一段时间内您获得了多少触摸CACurrentMediaTime()
。或测试的结果[touch tapCount]
。
如果两次轻按,则子类视图将发出一个NSNotification
视图控制器已注册以监听的视图。
当您的视图控制器听到通知时,它会触发一个选择器,该选择器使用上述代码隐藏或显示导航栏,具体取决于导航栏的当前可见状态,可通过读取导航栏的isHidden
属性进行访问。
编辑
我的答案中有关处理点击事件的部分可能在iOS 3.1之前有用。该UIGestureRecognizer
班可能是用于处理双水龙头,这几天的更好方法。
编辑2
隐藏导航栏的快捷方法是:
navigationController?.setNavigationBarHidden(true, animated: true)
要显示它:
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的《 View Controller编程指南》中有关“为导航视图采用全屏布局”的部分以及有关“自定义视图”的相关部分。如果您尝试执行类似Photos.app的操作,则可能正在使用滚动视图。请注意,导航栏会自动向滚动视图添加滚动内容插图,以说明导航栏(和状态栏)的高度,因此您必须在紧随其后将滚动视图的contentInset属性重置回零(UIEdgeInsetsZero)设置navigationBar的初始状态并在视图出现之前。
然后,如果您单击一下即可切换navigationBar和/或状态栏以显示或隐藏,则需要在切换方法中做两件事。第一种似乎是在更改NavigationBar隐藏属性之前保存滚动视图的contentOffset属性,然后立即将保存的值恢复为contentOffset。在更改navigationBarHidden属性之后,再次将contentInset属性归零到UIEdgeInsetsZero。另外,如果要切换状态栏,则需要先更改其状态,然后才能更改NavigationBar的状态。
在Swift中试试这个,
navigationController?.isNavigationBarHidden = true //Hide
navigationController?.isNavigationBarHidden = false //Show
要么
navigationController?.setNavigationBarHidden(true, animated: true) //Hide
navigationController?.setNavigationBarHidden(false, animated: true) //Show
隐藏导航栏:
[self.navigationController setNavigationBarHidden:YES animated:YES];
要显示导航栏:
[self.navigationController setNavigationBarHidden:NO animated:YES];
这是一个非常快速和简单的解决方案:
self.navigationController.hidesBarsOnTap = YES;
这将适用于单击而不是双击。同样,即使按下或弹出当前视图控制器,它也会改变导航控制器的行为。
如果只想为单个视图控制器设置行为,则始终可以在控制器的viewWillAppear:和viewWillDisappear:操作中修改此行为。
这是文档:
在Swift 4.2和Xcode 10中
self.navigationController?.isNavigationBarHidden = true //Hide
self.navigationController?.isNavigationBarHidden = false //Show
如果您不想只在第一个VC中显示导航栏,而是想在第二个VC onword的中显示
在您的第一个VC中编写此代码。
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.isNavigationBarHidden = true //Hide
}
override func viewWillDisappear(_ animated: Bool) {
self.navigationController?.isNavigationBarHidden = false //Show
}
如果要检测导航栏的状态,则将其隐藏/显示。您只需使用以下代码即可检测到-
if self.navigationController?.isNavigationBarHidden{
print("Show navigation bar")
} else {
print("hide navigation bar")
}
hidesBarsOnTap
UINavigationController属性上的内容可以通过iOS8 SDK来处理
SWIFT CODE:此代码完全适用于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
}
}