私はnavigationBarのないUIViewController(1)を持っており、navigationBarのある外側のUIViewController(2)をプッシュする必要があり、[戻る]をクリックすると、navigationBarは1つのコントローラーで非表示にする必要があります。uiviewcontrollerデリゲートを試しました。しかし、何も機能していません。
助けてください..
私はnavigationBarのないUIViewController(1)を持っており、navigationBarのある外側のUIViewController(2)をプッシュする必要があり、[戻る]をクリックすると、navigationBarは1つのコントローラーで非表示にする必要があります。uiviewcontrollerデリゲートを試しました。しかし、何も機能していません。
助けてください..
これにより、2番目の画面にナビゲーションバーが表示されます。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = NO;
}
また、最初の画面に戻ったときにナビゲーションバーを非表示にする必要があります。
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
self.navigationController.navigationBarHidden = YES;
}
アニメーションオプションが必要だと思います。上記のアプローチ(self.navigationController.navigationBarHidden = value
)を使用してロールすると、望ましくない視覚的なパン粉が発生します。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
これにより、navBarが表示/非表示のビューにしっかりと接続された状態でスムーズにプッシュ/ポップします。
このコードを最初のViewControllerに配置します
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = YES;
}
管理するビューコントローラのナビゲーションバーが非表示/状態を表示している場合、AlfieまたはAderからの回答は大惨事になります。
UINavigationBarの外観管理専用のコードをgithubに投稿しました。RRViewControllerExtensionをチェックしてください、それはあなたの問題を優雅に解決します。
RRViewControllerExtensionを使用すると、ヘッダーファイルを#importする必要はありません。必要なのは、ビューコントローラーで以下の目的のメソッドをオーバーライドすることだけです。
//override any of the methods below in your viewcontroller's .m file to make specific navigation bar appearance
-(BOOL)prefersNavigationBarHidden;
-(BOOL)prefersNavigationBarTransparent;
-(nullable UIColor *)preferredNavatationBarColor;
-(nullable UIColor *)preferredNavigationItemColor;
-(nullable UIImage *)preferredNavigationBarBackgroundImage;
-(nullable NSDictionary *)preferredNavigationTitleTextAttributes;