Pasek nawigacji Pokaż/Ukryj
Mam aplikację z paskiem nawigacyjnym składającym się z 2 przycisków paska. Chciałbym ukryć i pokazać ten pasek nawigacji, gdy użytkownik dwukrotnie dotknie ekranu.
Początkowo pasek nawigacji powinien być ukryty. Gdy użytkownik dwukrotnie dotknie ekranu, pasek nawigacji powinien wymyślić animację, taką jak to, co można zobaczyć w galerii zdjęć iPhone ' a.
Jak mogę coś takiego zrobić? Sugestie są zawsze mile widziane.
11 answers
To nie jest coś, co może zmieścić się w kilku linijkach kodu, ale jest to jedno podejście, które może działać dla Ciebie.
Aby ukryć pasek nawigacji:
[[self navigationController] setNavigationBarHidden:YES animated:YES];
Aby pokazać:
[[self navigationController] setNavigationBarHidden:NO animated:YES];
Dokumentacja tej metody jest dostępna tutaj .
Aby nasłuchać "podwójnego kliknięcia" lub dwukrotnego stuknięcia, podklasa {[4] } i utworzyć instancję tej podklasy właściwością kontrolera widoku view
.
W podklasie widok, nadpisuj jej -touchesEnded:withEvent:
metoda i liczba ile dotknięć dostajesz w czasie, mierząc czas między dwoma kolejnymi dotknięciami, być może z CACurrentMediaTime()
. Lub sprawdzić wynik z [touch tapCount]
.
Jeśli masz dwa stuknięcia, Twój podklasowany widok wydaje NSNotification
że twój kontroler widoków zarejestrował się, aby nasłuchać.
Gdy kontroler widoku usłyszy powiadomienie, uruchomi selektor, który ukrywa lub pokazuje pasek nawigacyjny za pomocą wspomnianego kodu, w zależności od aktualny stan widoczny paska nawigacyjnego, Dostęp poprzez odczyt paska nawigacyjnego isHidden
własność.
EDIT
Część mojej odpowiedzi do obsługi zdarzeń tap jest prawdopodobnie przydatna przed iOS 3.1. Na UIGestureRecognizer
klasa jest prawdopodobnie lepszym podejściem do obsługi podwójnych kranów, w dzisiejszych czasach.
EDIT 2
Szybki sposób ukrycia paska nawigacyjnego to:
navigationController?.setNavigationBarHidden(true, animated: true)
Aby pokazać:
navigationController?.setNavigationBarHidden(false, animated: true)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-15 09:16:55
Ten kod ci pomoże.
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];
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-06 10:01:48
Najpierw przeczytaj sekcję w Przewodniku programowania kontrolera widoku dla systemu IOS o "przyjmowaniu układu pełnoekranowego dla widoków nawigacyjnych" i sekcję o tym samym dla widoków niestandardowych. Jeśli próbujesz zrobić coś takiego jak zdjęcia.aplikacja to prawdopodobnie używasz widoku przewijania. Zwróć uwagę na komentarz, że paski nawigacji automatycznie dodają wstawkę zawartości przewijania do widoku przewijania, aby uwzględnić wysokość paska nawigacji (i paska stanu), więc musisz zresetować właściwość contentInset przewijania widoku z powrotem do zera (UIEdgeInsetsZero) zaraz po ustawieniu początkowego stanu paska nawigacyjnego i przed pojawieniem się widoku.
Następnie, jeśli masz jedno dotknięcie, które przełącza pasek nawigacyjny i / lub pasek stanu, aby pokazać lub ukryć, musisz zrobić dwie rzeczy w metodzie przełączania. Pierwszym wydaje się być zapisanie właściwości contentOffset widoku przewijania przed zmianą ukrytej Właściwości paska nawigacyjnego i przywrócenie zapisanej wartości do contentOffset zaraz po tym. I drugi do ponownie Zeruj właściwość contentInset na uiedgeinsetszero po zmianie właściwości navigationBarHidden. Ponadto, jeśli przełączasz pasek stanu, musisz zmienić jego stan przed zmianą stanu paska nawigacyjnego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-12 07:04:49
In Swift try this,
navigationController?.isNavigationBarHidden = true //Hide
navigationController?.isNavigationBarHidden = false //Show
Lub
navigationController?.setNavigationBarHidden(true, animated: true) //Hide
navigationController?.setNavigationBarHidden(false, animated: true) //Show
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-15 09:17:51
Aby ukryć pasek nawigacji:
[self.navigationController setNavigationBarHidden:YES animated:YES];
Aby wyświetlić pasek nawigacji:
[self.navigationController setNavigationBarHidden:NO animated:YES];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-05 06:25:44
Oto bardzo szybkie i proste rozwiązanie:
self.navigationController.hidesBarsOnTap = YES;
Będzie to działać przy jednym dotknięciu zamiast podwójnego stuknięcia. Zmieni to również zachowanie kontrolera nawigacyjnego nawet po naciśnięciu lub naciśnięciu bieżącego kontrolera widoku.
Możesz zawsze zmodyfikować to zachowanie w kontrolerze w ramach akcji viewWillAppear: i viewwilldisappear:, jeśli chcesz ustawić zachowanie tylko dla jednego kontrolera widoku.
Oto dokumentacja :
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-19 23:11:38
Jednym ze sposobów może być odznaczenie paska widoczności "pokazuje pasek nawigacji" w Inspektorze atrybutów.Mam nadzieję, że to komuś pomoże.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-21 18:29:50
W Swift 4.2 i Xcode 10
self.navigationController?.isNavigationBarHidden = true //Hide
self.navigationController?.isNavigationBarHidden = false //Show
Jeśli nie chcesz wyświetlać paska nawigacyjnego tylko w 1. VC, ale chcesz wyświetlać w 2. VC onword ' s
W Twoim pierwszym VC napisz ten kod.
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.isNavigationBarHidden = true //Hide
}
override func viewWillDisappear(_ animated: Bool) {
self.navigationController?.isNavigationBarHidden = false //Show
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-19 08:44:47
Jeśli chcesz wykryć stan paska nawigacyjnego to jest Ukryte / pokazane. Możesz po prostu użyć poniższego kodu do wykrycia -
if self.navigationController?.isNavigationBarHidden{
print("Show navigation bar")
} else {
print("hide navigation bar")
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-21 08:58:30
hidesBarsOnTap
Na właściwości UINavigationController wychodzi, aby obsłużyć to za pomocą iOS8 SDK
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 14:14:48
Kod SWIFT: działa w pełni dla systemu iOS 3.2 i nowszych.
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)
Następnie napisz
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
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-08 10:26:13