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?


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.


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


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 ...


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;
     }

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.