Swiftの最初のViewControllerからナビゲーションバーを非表示にする方法は?


258

ナビゲーションバーを最初のViewControllerまたは特定のViewControllerから迅速に非表示にするにはどうすればよいですか?

私は次のコードを使用しましたviewDidLoad()

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

そしてまたviewWillAppear

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

どちらのメソッドも、すべてのViewControllerからナビゲーションコントローラを非表示にします。


1
あなたがいずれかのためにそれを行うことはできません..すべてviewcontrollersためにそれを手動で管理する必要があります...
itsji10dra

回答:


321

他のすべてのビューでバーを表示する必要があることがわかっている場合は、を使用viewWillDisappearしてそれを再び表示するように設定できます。

Swiftの場合:

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
Amr ElAdawy 2017年

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メソッドを呼び出すことを忘れないでください:super.viewWillAppear(animated)およびsuper.viewWillDisappear(animated)
NielsKoole

それは言うリンクを削除しますか?
Cons Bulaquena 2018年

視覚的なレベルでの「スワイプバック」ではうまく機能しないと確信していましたが、すべて問題ありません。ありがとう!
tzaloga

補足:self.必要ありません。
Fayer 2018

ナビゲーションバーのあるビューから非表示のナビゲーションバーのあるビューへのスワイプバックで、ナビゲーションバーのフェーディングを再実装するにはどうすればよいですか?
岡原徹

77

あなたは、再表示することができますnavigationControllerviewWillDisappear

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

これの拡張機能を作成して、すべてのView Controllerでこれを何度も実装せずに拡張機能を再利用できるようにすることもできます。

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

8
本当に拡張する価値はありませんよね?:)
Joris Weimar

3
ナビゲーションバーを非表示/表示しているビューの数によって異なります。ほとんどの場合、最初の1つだけを非表示にするように感じますが、多くの場合は、拡張機能が適切です。
jnwagstaff 2018年

間違いなく、それだけの価値はありません。すでに存在するものを発明しないでください。
Thafer Shahin

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)がうまくいきました
Nate Uni

0

IOS 8では次のようにします

navigationController?.hidesBarsOnTap = true

UINavigationControllerの一部である場合のみ

元に戻す場合はfalseにしてください


0

上記のバリアントを使用し、アプリのセクションを分離して、異なるNavControllerに埋め込みます。このようにして、可視性をリセットする必要はありません。たとえば、起動シーケンスで非常に役立ちます。


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

0

ビューでset非表示メソッドを呼び出します表示され、消えます。ビュー内のメソッドを呼び出さないと、ステータスが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つの同等の反応の違いは何ですか?
Starsky

-3

あなたはウィンドウコントローラー(Swift3)からそれを行うことができます

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}

4
ウィンドウコントローラーとは
MBH 2017

これはmacOS用であり、iOS
Koen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.