web-dev-qa-db-ja.com

特定のビューでナビゲーションバーを非表示にする-Swift 3

アプリ内のナビゲーションを処理するNavigationControllerがあります。私の設計によれば、最初のビューには表示可能なNavigationBarがないはずです。後の他のすべては、意志。

このFirstViewでは、これまでこれを使用して、ViewDidLoad内のNavBarを非表示にしています。

self.navigationController?.isNavigationBarHidden = true

このFirstViewから、他のビューにアクセスできます。これらの他のビューでは、以下を使用してNavBarを示しています。

self.navigationController?.isNavigationBarHidden = false

私の問題はそれです:

  • Visible NavBarのあるビューから、非表示のNavBarのあるFirstViewに戻ると、NavBarが表示されます。基本的に、NavBarは最初に非表示になり、戻るボタンを使用したかどうかが表示されます。

どうすればこれを防ぐことができますか?

ありがとうございました!

6

そのコードをviewWillAppear()ではなくviewDidLoad()に移動します。

viewDidLoad()は、インスタンス化されたView Controllerごとに1回だけ呼び出されますが、viewWillAppear()は、ViewControllerが画面に表示されようとしているときに呼び出されます。

ビューコントローラのライフサイクルについて詳しく読むことができます ここ

7
Eggsalad

FirstViewControllerviewWillAppearメソッドに以下のコードを記述します。

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

そして、SecondViewControllerviewWillAppearメソッドで以下のコードを記述します

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

viewWillAppearおよびviewWillDisappearに続いてFirstViewControllerでナビゲーションバーを表示および非表示にしようとしないでください。

3
Balaji Galave

この機能を使用して、クールなアニメーションでナビゲーションバーを非表示にできます。

 func setupAnimationForNavigationBar(caseOfFunction: Bool) {
    if caseOfFunction == true {
        UIView.animate(withDuration: 0.5) {
            self.navigationController?.navigationBar.transform = CGAffineTransform(translationX: 0, y: -200)
        }
    } else {
        UIView.animate(withDuration: 0.5, animations: {
            self.navigationController?.navigationBar.transform = CGAffineTransform.identity
        })
    }

}

NavigationBarを非表示にする場合は「True」に設定し、NavigationBarを再度呼び出す場合は「False」に設定します。

2