UINavigationController bez paska nawigacji?

117

Mam uniwersalną aplikację iw wersji na iPada używam UISplitViewControllerdo tworzenia interfejsu podobnego do aplikacji Mail.

Miałem problem z wypchnięciem nowych widoków szczegółów, więc zdecydowałem się użyć, UINavigationControlleraby móc po prostu wypychać i wyświetlać widoki w razie potrzeby. Jednak nie chcę używać widoku nawigacji ani paska narzędzi. Ale bez względu na to, co robię, nie mogę ukryć paska nawigacji.

Próbowałem usunąć zaznaczenie opcji „Pokazuje pasek nawigacji” w IB, a także próbowałem ustawić:

[self.navigationController setNavigationBarHidden:YES];

w viewDidLoad/ viewDidAppear/ viewWillAppear. Próbowałem też tego w każdym z widoków, które będą forsowane. Nic nie działa.

Czy jest coś, czego tu brakuje? Czy można mieć UINavigationControllerbez paska narzędzi lub paska nawigacji?

DOOManiac
źródło
Jaka jest nadklasa tej klasy, której selfjest instancją?

Odpowiedzi:

192

Powinieneś być w stanie wykonać następujące czynności:

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

gdzie self.navigationController jest (oczywiście) instancją klasy UINavigationController. Wydaje się, że działa dla mnie, ale przed opublikowaniem tego przetestowałem tylko krótko.

Ashwin
źródło
2
Tak więc w Twoim przypadku self.navigationController.navigationBar.hidden = YES;
Ashwin
4
Zrobiło to! Chociaż dodam, że mogłem po prostu zaznaczyć pole Ukryte dla paska narzędzi Nagivation w IB, zamiast robić to za pomocą kodu. Dzięki!
DOOManiac,
1
Tak, przepraszam za to. Powinienem był wychwycić fakt, że używasz IB i wspomniałeś o ukrytym polu zamiast używać kodu. Ostatnio miałem ochotę stworzyć wszystkie moje interfejsy całkowicie programowo bez plików .xib, więc od razu poszedłem do tego, aby uzyskać odpowiedź.
Ashwin
5
Nazywam to jest w widoku, w moim kontrolerze widoku w ten sposób - (void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden = YES; } i działa
Ali
2
Pasek nawigacyjny jest ukryty, ale mój ekran kontrolera widoku nie rozszerza się do pełnego ekranu
ArdenDev
40

Jeśli nie chcesz mieć paska nawigacyjnego i chcesz, aby zawartość była dostosowana do miejsca, w którym normalnie byłby pasek nawigacji, powinieneś użyć

self.navigationController.navigationBarHidden = YES;

Daje to następujący wynik:

wprowadź opis obrazu tutaj

Natomiast self.navigationController.navigationBar.hidden = YES;daje miejsce, w którym powinien znajdować się pasek nawigacji. Lubię to:

wprowadź opis obrazu tutaj

HalR
źródło
Bardzo ładne wyróżnienie różnicy w wynikach z iOS 6. Od IOS 7 wygląda na to, że spacja została usunięta, ale poczekam, aż więcej osób to zweryfikuje.
Alex Zavatone,
39

W Xcode 4.3.2:

  1. Wybierz kontroler nawigacji w serii ujęć
  2. Wybierz Inspektor atrybutów w (prawym) panelu Narzędzia
  3. W kategorii Kontroler nawigacji znajdują się dwa pola wyboru:

    [] Wyświetla pasek nawigacji

    [] Wyświetla pasek narzędzi

Pracował dla mnie ...

Avner
źródło
8

Szybki 4

Ukrywam to na widoku

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

        self.navigationController?.isNavigationBarHidden = true;
    }

Następnie możesz go odłożyć, gdy popchniesz segue (jeśli chcesz mieć przycisk Wstecz w następnym widoku)

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
     {
        self.navigationController?.isNavigationBarHidden = false;
     }
user1296082
źródło
3

Swift 3 programowo

self.navigationController.isNavigationBarHidden = true

lub

self.navigationController.navigationBar.isHidden = true

Uwaga: nie widziałem różnicy między tymi dwoma podejściami do testowania na iOS 10.

Mobile Dan
źródło
1

Wszystkie te odpowiedzi nadal pozostawiają u góry miejsce na pasek stanu - dodaj tę linię, aby również ją usunąć:

navController.navigationBar.isHidden = true
navController.accessibilityFrame = CGRect.zero
Cbas
źródło