我有一个带有2个按钮的导航栏的应用程序。当用户双击屏幕时,我想隐藏并显示此导航栏。
最初,应隐藏导航栏。当用户双击屏幕时,导航栏应该会出现一个动画,就像iPhone的照片库中可以看到的一样。
我该怎么做呢?建议总是受到赞赏。
答案 0 :(得分:363)
这不适用于几行代码,但这是一种可能适合您的方法。
隐藏导航栏:
[[self navigationController] setNavigationBarHidden:YES animated:YES];
要表明:
[[self navigationController] setNavigationBarHidden:NO animated:YES];
此方法的文档为available here。
要监听“双击”或双击子类UIView
,并将该子类的实例作为视图控制器的view
属性。
在视图子类中,覆盖其-touchesEnded:withEvent:
方法并计算在一段时间内获得的触摸次数,方法是测量两次连续点击之间的时间,可能是CACurrentMediaTime()
。或者从[touch tapCount]
测试结果。
如果您获得两次点击,则子视图会发出视图控制器已注册要监听的NSNotification
。
当您的视图控制器听到通知时,它会触发一个选择器,该选择器使用上述代码隐藏或显示导航栏,具体取决于导航栏的当前可见状态,通过阅读导航栏的isHidden
属性进行访问。
修改强>
我处理点击事件的答案部分可能在iOS 3.1之前有用。如今,UIGestureRecognizer
类可能是处理双击的更好方法。
编辑2
隐藏导航栏的Swift方式是:
self.navigationController?.setNavigationBarHidden(true, animated: true)
要表明:
self.navigationController?.setNavigationBarHidden(false, animated: true)
答案 1 :(得分:17)
此代码可以帮助您。
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];
}
}
答案 2 :(得分:16)
首先阅读“适用于iOS的View Controller编程指南”中有关“采用导航视图的全屏布局”的部分以及关于自定义视图的相关部分。如果您尝试执行类似Photos.app的操作,那么您可能正在使用滚动视图。请注意导航栏自动将滚动内容插入添加到滚动视图的注释,以考虑导航栏(和状态栏)的高度,因此您必须立即将滚动视图的contentInset属性重置为零(UIEdgeInsetsZero)设置navigationBar的初始状态,并在视图出现之前。
然后,如果您只需点击一下切换导航栏和/或状态栏以显示或隐藏,您需要在切换方法中执行两项操作。第一个似乎是在更改NavigationBar隐藏属性之前保存滚动视图的contentOffset属性,然后将保存的值恢复到contentOffset。第二,在更改navigationBarHidden属性后,再次将contentInset属性清零为UIEdgeInsetsZero。此外,如果要切换状态栏,则需要在更改navigationBar状态之前更改其状态。
答案 3 :(得分:9)
在 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
答案 4 :(得分:7)
隐藏导航栏:
[self.navigationController setNavigationBarHidden:YES animated:YES];
显示导航栏:
[self.navigationController setNavigationBarHidden:NO animated:YES];
答案 5 :(得分:7)
这是一个非常快速而简单的解决方案:
self.navigationController.hidesBarsOnTap = YES;
这将适用于单击而非双击。此外,即使在按下或弹出当前视图控制器后,它也会更改导航控制器的行为。
如果您只想为单个视图控制器设置行为,则可以在viewWillAppear:和viewWillDisappear:actions中的控制器中修改此行为。
以下是documentation:
答案 6 :(得分:4)
答案 7 :(得分:2)
在Swift 4.2和Xcode 10中
#include<iostream>
#include<sstream>
#include<vector>
#include<string>
using namespace std;
int main() {
int t;
(cin >> t).get();
while (t--) {
string str;
getline(cin, str);
stringstream split(str);
string each;
vector <string> tokens;
while (getline(split, each, ' ')) {
///scan each part of stream;
tokens.push_back(each);
}
int ind = -1;
for (int i = 0; i < tokens.size(); i++) {
string temp;
temp = tokens[i];
for (int j = 0; j < temp.length(); j++) {
if (temp[j] == 'm') {
ind = i;
break;
}
}
if (ind != -1)
break;
}
int i1, i2;
string str1;
if (ind == 0) {
i1 = stoi(tokens[2]);
i2 = stoi(tokens[4]);
int result = i2 - i1;
cout << result << " + " << i1 << " = " << i2 << "\n";
//break;
}
else if (ind == 2) {
i1 = stoi(tokens[0]);
i2 = stoi(tokens[4]);
int result;
result = i2 - i1;
cout << i1 << " + " << result << " = " << i2 << "\n";
//break;
}
else if (ind == 4) {
i1 = stoi(tokens[0]);
i2 = stoi(tokens[2]);
int result = i1 + i2;
cout << i1 << " + " << i2 << " = " << result << "\n";
//break;
}
tokens.clear();
str.erase();
}
}
如果您不想仅在第一个VC中显示导航栏,而是要在第二个VC onword的显示中显示
在您的第一个VC中编写此代码。
self.navigationController?.isNavigationBarHidden = true //Hide
self.navigationController?.isNavigationBarHidden = false //Show
答案 8 :(得分:2)
如果您想检测导航栏的状态 隐藏/显示。您可以简单地使用以下代码来检测-
if self.navigationController?.isNavigationBarHidden{
print("Show navigation bar")
} else {
print("hide navigation bar")
}
答案 9 :(得分:0)
hidesBarsOnTap
用iOS8 SDK来处理这个问题
答案 10 :(得分:-3)
SWIFT CODE:适用于iOS 3.2及更高版本。
MDI Parent
然后写
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)