UINavigationController без панели навигации?


117

У меня есть универсальное приложение, и в версии для iPad я использую UISplitViewControllerдля создания интерфейса, похожего на приложение Mail.

У меня возникли проблемы с продвижением новых подробных представлений, поэтому я решил использовать, UINavigationControllerчтобы я мог просто нажимать и открывать представления по мере необходимости. Однако я не хочу использовать панель навигации или панель инструментов. Но что бы я ни делал, я не могу скрыть панель навигации.

Я попытался снять флажок «Показывает панель навигации» в IB, а также попытался установить:

[self.navigationController setNavigationBarHidden:YES];

в viewDidLoad/ viewDidAppear/ viewWillAppear. Я также пробовал это в каждом из представлений, которые будут отправлены. Ничего не работает.

Что-то мне здесь не хватает? Можно ли иметь UINavigationControllerбез панели инструментов или панели навигации?


Какой суперкласс класса selfявляется экземпляром?

Ответы:


192

Вы должны уметь делать следующее:

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

где self.navigationController (очевидно) является экземпляром UINavigationController. Кажется, у меня работает, но я только кратко протестировал его, прежде чем опубликовать это.


2
Итак, в вашем случае self.navigationController.navigationBar.hidden = YES;
Ashwin

4
Вот и все! Хотя я добавлю, что мне удалось просто установить флажок Скрытый для панели инструментов Nagivation в IB вместо того, чтобы делать это через код. Спасибо!
DOOManiac

1
Да, извините за это. Я должен был уловить тот факт, что вы использовали IB, и упомянуть скрытый блок вместо использования кода. Недавно я начал создавать все свои интерфейсы полностью программно, без файлов .xib, поэтому сразу перешел к этому, чтобы ответить.
Ashwin

5
Я называю это видимым будет в моем контроллере представления вот так, - (void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden = YES; } и он работает
Али

2
Навигационная панель скрыта, но мой экран контроллера представления не расширяется на весь экран
ArdenDev

40

Если вам не нужна панель навигации, и вы хотите, чтобы содержимое настраивалось до того места, где обычно находится панель навигации, вам следует использовать

self.navigationController.navigationBarHidden = YES;

Это даст вам такой результат:

введите описание изображения здесь

В то время как self.navigationController.navigationBar.hidden = YES;дает вам пространство, где должна быть панель навигации. Как это:

введите описание изображения здесь


Очень хорошее различие в разнице в результатах с iOS 6. Похоже, что в iOS 7 пространство удалено, но я подожду, пока другие люди не подтвердят, что это так.
Alex Zavatone

39

В Xcode 4.3.2:

  1. Выберите контроллер навигации в раскадровке
  2. Выберите Attributes Inspector на (правой) панели Utilities.
  3. В категории «Контроллер навигации» есть два флажка:

    [] Показывает панель навигации

    [] Показывает панель инструментов

Работал у меня ...


8

Swift 4

Я прячу это на виду,

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

        self.navigationController?.isNavigationBarHidden = true;
    }

Затем вы можете вернуть его, когда нажмете переход (если вы хотите, чтобы кнопка возврата была на следующем просмотре)

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

3

Swift 3 программно

self.navigationController.isNavigationBarHidden = true

или

self.navigationController.navigationBar.isHidden = true

Примечание: я не заметил разницы между этими двумя подходами при тестировании на iOS 10.


1

Все эти ответы по-прежнему оставляют место наверху для строки состояния - добавьте эту строку, чтобы удалить ее:

navController.navigationBar.isHidden = true
navController.accessibilityFrame = CGRect.zero
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.