UINavigationController ohne Navigationsleiste?


117

Ich habe eine universelle App und verwende auf der iPad-Version UISplitViewControllereine Benutzeroberfläche, die der Mail-App ähnelt.

Ich hatte Probleme beim Verschieben neuer Detailansichten, daher habe ich mich für eine entschieden, UINavigationControllerdamit ich die Ansichten nach Bedarf einfach verschieben und öffnen kann. Ich möchte jedoch weder die Navigationsansicht noch eine Symbolleiste verwenden. Aber egal was ich mache, ich kann die Navigationsleiste nicht ausblenden.

Ich habe versucht, das Kontrollkästchen "Navigationsleiste anzeigen" in IB zu deaktivieren, und ich habe auch versucht, Folgendes einzustellen:

[self.navigationController setNavigationBarHidden:YES];

in der viewDidLoad/ viewDidAppear/ viewWillAppear. Ich habe es auch in jeder der Ansichten versucht, die gepusht werden. Nichts funktioniert.

Fehlt mir hier etwas? Ist es möglich, eine UINavigationControllerohne Symbolleiste oder Navigationsleiste zu haben?


Wovon ist die Oberklasse der Klasse selfeine Instanz?

Antworten:


192

Sie sollten in der Lage sein, Folgendes zu tun:

self.navigationController.navigationBar.isHidden = true //Swift 5

Dabei ist self.navigationController (offensichtlich) eine Instanz von UINavigationController. Scheint für mich zu funktionieren, aber ich habe es nur kurz getestet, bevor ich es gepostet habe.


2
In Ihrem Fall ist self.navigationController.navigationBar.hidden = YES;
Ashwin

4
Das hat es geschafft! Ich möchte jedoch hinzufügen, dass ich einfach das Kontrollkästchen Versteckt für die Nagivation-Symbolleiste in IB aktivieren konnte, anstatt dies über Code zu tun. Vielen Dank!
DOOManiac

1
Ja, tut mir leid. Ich hätte die Tatsache aufgreifen sollen, dass Sie IB verwendet haben, und die versteckte Box anstelle von Code erwähnt. Ich habe vor kurzem versucht, alle meine Schnittstellen vollständig programmgesteuert ohne .xib-Dateien zu erstellen. Deshalb habe ich meine Antwort direkt beantwortet.
Ashwin

5
Ich nenne das in viewwillapap in meinem View Controller so - (void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden = YES; } und es funktioniert
Ali

2
Die navBar ist ausgeblendet, aber mein View Controller-Bildschirm wird nicht auf den Vollbildmodus erweitert
ArdenDev

40

Wenn Sie keine Navigationsleiste möchten und der Inhalt an die Stelle angepasst werden soll, an der sich die Navigationsleiste normalerweise befindet, sollten Sie verwenden

self.navigationController.navigationBarHidden = YES;

Dies ergibt ein Ergebnis wie folgt:

Geben Sie hier die Bildbeschreibung ein

Während self.navigationController.navigationBar.hidden = YES;gibt Ihnen einen Platz, wo die Navigationsleiste sein sollte. So was:

Geben Sie hier die Bildbeschreibung ein


Sehr schöne Unterscheidung hinsichtlich der unterschiedlichen Ergebnisse mit iOS 6. Ab IOS 7 scheint der Speicherplatz entfernt zu sein, aber ich werde warten, bis weitere Personen dies überprüfen.
Alex Zavatone

39

In Xcode 4.3.2:

  1. Wählen Sie den Navigationscontroller im Storyboard aus
  2. Wählen Sie den Attributinspektor im Bereich (rechts) Dienstprogramme aus
  3. Unter der Kategorie Navigationscontroller haben Sie zwei Kontrollkästchen:

    [] Zeigt die Navigationsleiste an

    [] Zeigt die Symbolleiste an

Arbeitete für mich ...


8

Swift 4

Ich verstecke es in viewWillAppear

     override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        self.navigationController?.isNavigationBarHidden = true;
    }

Dann können Sie es zurücksetzen, wenn Sie einen Segue drücken (wenn Sie die Zurück-Taste in der nächsten Ansicht haben möchten).

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
     {
        self.navigationController?.isNavigationBarHidden = false;
     }

3

Swift 3 programmgesteuert

self.navigationController.isNavigationBarHidden = true

oder

self.navigationController.navigationBar.isHidden = true

Hinweis: Ich habe keinen Unterschied zwischen diesen beiden Testansätzen unter iOS 10 festgestellt.


1

Alle diese Antworten lassen oben immer noch ein Leerzeichen für die Statusleiste - fügen Sie diese Zeile hinzu, um auch diese zu entfernen:

navController.navigationBar.isHidden = true
navController.accessibilityFrame = CGRect.zero
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.