アプリ内のナビゲーションを処理するNavigationControllerがあります。私の設計によれば、最初のビューには表示可能なNavigationBarがないはずです。後の他のすべては、意志。
このFirstViewでは、これまでこれを使用して、ViewDidLoad内のNavBarを非表示にしています。
self.navigationController?.isNavigationBarHidden = true
このFirstViewから、他のビューにアクセスできます。これらの他のビューでは、以下を使用してNavBarを示しています。
self.navigationController?.isNavigationBarHidden = false
私の問題はそれです:
どうすればこれを防ぐことができますか?
ありがとうございました!
そのコードをviewWillAppear()
ではなくviewDidLoad()
に移動します。
viewDidLoad()
は、インスタンス化されたView Controllerごとに1回だけ呼び出されますが、viewWillAppear()
は、ViewControllerが画面に表示されようとしているときに呼び出されます。
ビューコントローラのライフサイクルについて詳しく読むことができます ここ 。
FirstViewControllerのviewWillAppearメソッドに以下のコードを記述します。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.isNavigationBarHidden = true
}
そして、SecondViewControllerのviewWillAppearメソッドで以下のコードを記述します
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.isNavigationBarHidden = false
}
viewWillAppearおよびviewWillDisappearに続いてFirstViewControllerでナビゲーションバーを表示および非表示にしようとしないでください。
この機能を使用して、クールなアニメーションでナビゲーションバーを非表示にできます。
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」に設定します。