Як сховати панель навігації від першого ViewController у Swift?


258

Як я можу швидко приховати панель навігації від першого ViewController або певного ViewController?

Я використовував такий код у viewDidLoad():

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

а також на viewWillAppear:

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

Обидва способи приховують контролер навігації від усіх ViewControllers.


1
вам потрібно керувати ним вручну для всіх контролерів перегляду .. ви не можете це зробити ні для одного ..
itsji10dra

Відповіді:


320

Якщо ви знаєте, що для всіх інших представлень повинен бути видимий смугу, ви можете скористатися 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
Амр 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

Чи видаляє це посилання, яке відповідає назад?
Мінуси Булакена

Я був переконаний, що це не буде добре працювати з "пальцем назад" на візуальному рівні, але все добре. Дякую!
tzaloga

Бічна примітка: 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)
}

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

7
Не дуже варто розширення, чи не так? :)
Йоріс Веймар

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 (правда, анімація: правда) працював на мене
Nate Uni

0

У IOS 8 роблять це так

navigationController?.hidesBarsOnTap = true

але лише тоді, коли він є частиною UINavigationController

зробіть його помилковим, коли ви хочете його повернути


0

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


0
 private func setupView() {
        view.backgroundColor = .white
        navigationController?.setNavigationBarHidden(true, animated: false)
    }

0

Зателефонуйте у спосіб перегляду встановленого приховування. З'явиться та зникне. якщо ви не зателефонуєте в метод перегляду, він зникне зі статусом 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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.