最初,导航栏应该被隐藏。当用户双击屏幕时,导航栏应该带有动画效果出现,就像在iPhone的照片库中看到的那样。
我应该如何实现这个功能?欢迎提供建议。
这不是可以用几行代码解决的问题,但这是一种可能适用于你的方法。
隐藏导航栏:
[[self navigationController] setNavigationBarHidden:YES animated:YES];
展示它的方法:[[self navigationController] setNavigationBarHidden:NO animated:YES];
该方法的文档在此处可用。
要监听“双击”或双击操作,请子类化UIView
,并将该子类的一个实例作为您视图控制器的view
属性。
在视图子类中,重写其-touchesEnded:withEvent:
方法,并通过测量两个连续点击之间的时间来计算在一段时间内获得的触摸次数,也许可以使用CACurrentMediaTime()
。或测试从[touch tapCount]
获取的结果。
如果您获得了两个点击,则您的子类视图会发出一个由您的视图控制器注册以侦听的NSNotification
。
当您的视图控制器收到通知时,它将触发一个选择器,根据导航栏的当前可见状态(通过读取导航栏的isHidden
属性访问)使用上述代码隐藏或显示导航栏。
编辑
在处理点击事件的部分可能在iOS 3.1之前有用。如今,UIGestureRecognizer
类可能是处理双击的更好方法。
编辑2
隐藏导航栏的Swift方式是:
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];
}
}
在 Swift 中尝试这样做:
navigationController?.isNavigationBarHidden = true //Hide
navigationController?.isNavigationBarHidden = false //Show
或者navigationController?.setNavigationBarHidden(true, animated: true) //Hide
navigationController?.setNavigationBarHidden(false, animated: true) //Show
这里有一个非常快速简单的解决方案:
self.navigationController.hidesBarsOnTap = YES;
要隐藏导航栏:
[self.navigationController setNavigationBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:NO animated:YES];
In Swift 4.2 and Xcode 10
self.navigationController?.isNavigationBarHidden = true //Hide
self.navigationController?.isNavigationBarHidden = false //Show
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中的这种情况。