ナビゲーション バーを非表示にしたり表示したりする以下のコードがあります。最初のビューが読み込まれると非表示になり、次に「子」が呼び出されると非表示になります。問題は、ルート ビューに戻ったときに再び非表示になるようにトリガーするイベント/アクションが見つからないことです...
ルート ページに手動でアクションを実行する「テスト」ボタンがありますが、見栄えがよくないので、自動化したいと考えています。
-(void)hideBar
{
self.navController.navigationBarHidden = YES;
}
-(void)showBar
{
self.navController.navigationBarHidden = NO;
}
ベストアンサー1
私が見つけた最も良い解決策は、最初のビュー コントローラーで次の操作を実行することです。
オブジェクティブC
- (void)viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:YES animated:animated];
[super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillDisappear:animated];
}
迅速
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.setNavigationBarHidden(true, animated: animated)
super.viewWillAppear(animated)
}
override func viewWillDisappear(_ animated: Bool) {
self.navigationController?.setNavigationBarHidden(false, animated: animated)
super.viewWillDisappear(animated)
}
これにより、スタックに次のものをプッシュすると、ナビゲーション バーが左から (次のビューとともに)UIViewController
アニメーション表示され、スタックの戻るボタンを押すと、ナビゲーション バーが左から (古いビューとともに) アニメーション表示されますUINavigationBar
。
また、これらはデリゲート メソッドではなく、UIViewController
これらのメソッドの の実装をオーバーライドしており、ドキュメントに従って、実装のどこかでスーパー の実装を呼び出す必要があることにも注意してください。