Как скрыть панель навигации от первого ViewController в Swift?

190

Как скрыть панель навигации от первого ViewController или конкретного ViewController в swift?

Я использовал следующий код в viewDidLoad():

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.isNavigationBarHidden = true
}

а также на viewWillAppear:

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

Оба метода скрывают контроллер навигации от всех ViewControllers.

  • 1
    вам нужно управлять им вручную для всех viewcontrollers .. вы не можете сделать это ни для одного ..
Теги:
uinavigationcontroller
uinavigationbar

10 ответов

117
Лучший ответ

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

В Свифте:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.setNavigationBarHidden(false, animated: animated)
}
  • 1
    Этот ответ более эффективен. Подумайте о повторяющемся коде с каждым новым ViewController, который вы добавляете. stackoverflow.com/a/39679506/5079380
216

Swift 3

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

    // Hide the navigation bar on the this view controller
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

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

    // Show the navigation bar on other view controllers
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
  • 3
    При переопределении не забудьте вызывать супер методы: super.viewWillAppear (анимированный) и super.viewWillDisappear (анимированный)
  • 0
    Любая проблема, если я не вызываю super.viewWillAppear ...... или другой супер метод ???
Показать ещё 6 комментариев
69

Вы можете отобразить navigationController в viewWillDisappear

override func viewWillDisappear(animated: Bool)
{
    super.viewWillDisappear(animated)
    self.navigationController?.isNavigationBarHidden = false
}

Swift 3

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

    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
16

Вы также можете создать расширение для этого, чтобы вы могли повторно использовать расширение, не выполняя его снова и снова в каждом контроллере представления.

import UIKit

extension UIViewController {
    func hideNavigationBar(){
        // Hide the navigation bar on the this view controller
        self.navigationController?.setNavigationBarHidden(true, animated: true)

    }

    func showNavigationBar() {
        // Show the navigation bar on other view controllers
        self.navigationController?.setNavigationBarHidden(false, animated: true)
    }

}

Итак, вы можете использовать методы расширения, как показано ниже

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

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        showNavigationBar()
    }
  • 6
    Не правда ли, расширение стоит того? :)
  • 3
    Зависит от того, сколько просмотров вы скрываете / показывает навигационные панели. Я чувствую, что в большинстве случаев вы скрываете только первый, но если вы делаете это много, расширение приятно.
Показать ещё 1 комментарий
6

В Swift 3 вы можете использовать isNavigationBarHidden Property также для отображения или скрытия панели навигации

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // Hide the navigation bar for current view controller
    self.navigationController?.isNavigationBarHidden = true;
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // Show the navigation bar on other view controllers
   self.navigationController?.isNavigationBarHidden = false;
}
2

Способы отображения панели навигации в Swift:

self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.isHidden = false
self.navigationController?.isNavigationBarHidden = false
1

Способы скрыть панель навигации в Swift:

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
  • 1
    self.navigationController? .setNavigationBarHidden (true, animated: true) работал для меня
0

Я использую вариант выше и изолирую разделы моего приложения, которые будут встроены в разные NavControllers. Таким образом, мне не нужно сбрасывать видимость. Например, очень полезно в последовательности запуска.

0

В IOS 8 делай как

navigationController?.hidesBarsOnTap = true

но только когда он является частью UINavigationController

сделать это ложным, когда вы хотите его вернуть

0

Вы можете сделать это из оконного контроллера (Swift3)

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}
  • 4
    что такое оконный контроллер?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню