wake-up-neo.net

Navigationsleiste ein-/ausblenden 

Ich habe eine App mit einer Navigationsleiste bestehend aus 2 Schaltflächen. Ich möchte diese Navigationsleiste ein- und ausblenden, wenn ein Benutzer doppelt auf den Bildschirm tippt.

Die Navigationsleiste sollte zunächst ausgeblendet sein. Wenn ein Benutzer zweimal auf den Bildschirm tippt, sollte in der Navigationsleiste eine Animation angezeigt werden, wie sie beispielsweise in der Fotogalerie des iPhone zu sehen ist.

Wie kann ich das machen? Vorschläge werden immer geschätzt.

149
iscavengers

Dies kann nicht in ein paar Zeilen Code passen, aber dies ist ein Ansatz, der für Sie funktionieren könnte.

So blenden Sie die Navigationsleiste aus:

[[self navigationController] setNavigationBarHidden:YES animated:YES];

Um es zu zeigen:

[[self navigationController] setNavigationBarHidden:NO animated:YES];

Dokumentation für diese Methode ist hier verfügbar .

Um nach einem "Doppelklick" oder einem Doppelklick zu suchen, müssen Sie die Unterklasse UIView und eine Instanz der Unterklasse der Eigenschaft view des View-Controllers erstellen.

Überschreiben Sie in der Ansichtsunterklasse die Methode -touchesEnded:withEvent: , und zählen Sie, wie viele Berührungen Sie in einer bestimmten Zeitspanne erhalten, indem Sie die Zeit zwischen zwei aufeinanderfolgenden Antippen messen, möglicherweise mit -timeIntervalSinceDate: . Oder testen Sie das Ergebnis von [touch tapCount] .

Wenn Sie zwei Taps erhalten, gibt Ihre untergeordnete Ansicht eine NSNotification aus, für die sich Ihr View-Controller zum Abhören registriert hat. 

Wenn Ihr View Controller die Benachrichtigung hört, wird eine Auswahl ausgelöst, die die Navigationsleiste je nach aktuell sichtbarem Status der Navigationsleiste entweder verbirgt oder anzeigt, indem Sie die Eigenschaft isHidden der Navigationsleiste lesen.

EDIT

Der Teil meiner Antwort zur Behandlung von Tap-Events ist wahrscheinlich vor iOS 3.1 hilfreich. Die UIGestureRecognizer -Klasse ist heutzutage wahrscheinlich ein besserer Ansatz für die Handhabung von Doppelklopfen.

EDIT 2

Die Navigationsleiste kann schnell ausgeblendet werden:

self.navigationController?.setNavigationBarHidden(true, animated: true)

Um es zu zeigen:

self.navigationController?.setNavigationBarHidden(false, animated: true)
361
Alex Reynolds

Dieser Code wird Ihnen helfen.

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];
}
}
17
Perjan Duro

Lesen Sie zuerst den Abschnitt im View Controller-Programmierhandbuch für iOS über 'Ein Vollbild-Layout für Navigationsansichten übernehmen' und den Abschnitt 'Benutzerdefinierte Ansichten'. Wenn Sie versuchen, etwas wie Photos.app auszuführen, verwenden Sie wahrscheinlich eine Bildlaufansicht. Beachten Sie den Kommentar, dass Navigationsleisten der Bildlaufansicht automatisch einen Bildlaufinhalt für die Bildlaufleiste hinzufügen, um die Höhe der Navigationsleiste (und der Statusleiste) zu berücksichtigen, sodass Sie die contentInset -Eigenschaft Ihrer Bildlaufansicht sofort auf Null zurücksetzen müssen (UIEdgeInsetsZero) Einrichten des Anfangsstatus der Navigationsleiste und bevor die Ansicht angezeigt wird.

Wenn Sie dann mit einem einzigen Tastendruck die Navigationsleiste und/oder die Statusleiste ein- oder ausblenden können, müssen Sie zwei Schritte in der Toggle-Methode ausführen. Die erste scheint zu sein, die contentOffset -Eigenschaft der Bildlaufansicht zu speichern, bevor die ausgeblendete NavigationBar-Eigenschaft geändert wird, und den gespeicherten Wert anschließend direkt in contentOffset wiederherzustellen. Und nach dem Ändern der navigationBarHidden-Eigenschaft die contentInset -Eigenschaft erneut auf UIEdgeInsetsZero zurücksetzen. Wenn Sie die Statusleiste umschalten, müssen Sie auch den Status ändern, bevor Sie den Status der Navigationsleiste ändern.

16
jclee

In Swift versuche dies,

self.navigationController?.navigationBarHidden = true  //Hide
self.navigationController?.navigationBarHidden = false //Show

oder

self.navigationController?.setNavigationBarHidden(true, animated: true) //Hide
self.navigationController?.setNavigationBarHidden(false, animated: true) //SHow
9
Zaid Pathan

Navigationsleiste ausblenden:

[self.navigationController setNavigationBarHidden:YES animated:YES];

So zeigen Sie die Navigationsleiste an:

[self.navigationController setNavigationBarHidden:NO animated:YES];
7

Hier ist eine sehr schnelle und einfache Lösung:

self.navigationController.hidesBarsOnTap = YES;

Dies funktioniert mit einem einzigen Tap statt mit einem Doppeltipp. Das Verhalten für den Navigationscontroller wird auch dann geändert, wenn der aktuelle Ansichtscontroller gedrückt oder gedrückt wird. 

Sie können dieses Verhalten in Ihrem Controller immer innerhalb von viewWillAppear: und viewWillDisappear: Aktionen ändern, wenn Sie das Verhalten nur für einen einzelnen View-Controller festlegen möchten. 

Hier ist die Dokumentation :

7
amayer171292591

Eine Möglichkeit könnte sein, das Kontrollkästchen "Sichtbarkeit der Leiste anzeigen" im Attribut-Inspector zu deaktivieren.

 enter image description here

2
Avijit Nagare

In Swift 4.2 und Xcode 10

self.navigationController?.isNavigationBarHidden = true  //Hide
self.navigationController?.isNavigationBarHidden = false  //Show

Wenn Sie die Navigationsleiste nicht nur in 1st VC anzeigen möchten, sondern in 2nd VC onwords

Schreiben Sie in Ihrem ersten VC diesen Code.

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.isNavigationBarHidden = true  //Hide
}

override func viewWillDisappear(_ animated: Bool) {
    self.navigationController?.isNavigationBarHidden = false  //Show
}
0
iOS
0
theiOSDude