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

258

Как я могу скрыть панель навигации от первого 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 .. вы не можете сделать это ни для одного ..
itsji10dra

Ответы:

321

Если вы знаете, что у всех других представлений панель должна быть видимой, вы можете использовать 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)
}
Rengers
источник
1
Этот ответ более эффективен. Подумайте о повторяющемся коде с каждым новым ViewController, который вы добавляете. stackoverflow.com/a/39679506/5079380
Amr ElAdawy
252

Свифт 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 (анимированный)
NielsKoole
Удаляет ли это ссылку, которая говорит обратно?
Минусы Bulaquena
Я был убежден, что это не будет хорошо работать с «проведением назад» на визуальном уровне, но все в порядке. Спасибо!
Цалога
Примечание: self.не требуется.
Фейер
Скольжение назад, от представления с панелью навигации к представлению со скрытой панелью навигации, как мы можем переопределить исчезновение панели навигации?
Т.Окахара
77

Вы можете показать navigationControllerвviewWillDisappear

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

Свифт 3

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

    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
Deepesh
источник
21

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

import UIKit

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

    }

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

}

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

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

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        showNavigationBar(animated: animated)
    }
Ankahathara
источник
8
Не правда ли, расширение стоит того? :)
Йорис Веймар
3
Зависит от того, сколько просмотров вы скрываете / показывает навигационные панели. Я чувствую, что в большинстве случаев вы прячете только первый, но если вы делаете это много, расширение приятно.
jnwagstaff
Определенно, это того не стоит. Не изобретайте что-то уже существует.
Тафер Шахин
8

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

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;
}
Дилип Джангид
источник
3

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

self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.isHidden = false
self.navigationController?.isNavigationBarHidden = false
Махеш Чаудхари
источник
3

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

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
Махеш Чаудхари
источник
1
self.navigationController? .setNavigationBarHidden (true, animated: true) работал для меня
Нейт Уни
0

В IOS 8 делай как

navigationController?.hidesBarsOnTap = true

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

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

Zar E Ahmer
источник
0

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

нарисовался..
источник
0
 private func setupView() {
        view.backgroundColor = .white
        navigationController?.setNavigationBarHidden(true, animated: false)
    }
Wasim
источник
0

Вызовите метод скрытия set in Появится и исчезнет. если вы не вызовете метод, вид исчезнет со статусом false. Он будет скрывать панель навигации в полной иерархии навигации

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

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationController?.setNavigationBarHidden(false, animated:true)
}
Талха Расул
источник
Это ответ копирования / вставки. В чем разница между вашим ответом и другими 2 или 3 равными ответами здесь ??
Старски
-3

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

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}
Педро Луз
источник
4
что такое оконный контроллер?
MBH
Это для macOS, а не для iOS
Koen.