画面遷移時にナビゲーションバーやタブバーを隠す方法

UINavigationControllerやUITabBarControllerを使ったiPhoneアプリを作った場合、以下のように画面遷移時には基本的に上部のナビゲーションバーや下部のタブバーは表示されたままである。
 
しかし何らかの理由で画面遷移時にこのナビゲーションバーやタブバーを隠したいという場合には、以下のような方法で実現が可能である。


1. ナビゲーションバーを隠す方法
遷移後の画面をコントロールするUIViewControllerのサブクラスで、ナビゲーションバーの表示・非表示を行う。
(ナビゲーションバーを非表示にすると、遷移前の画面に戻るボタンが無くなるので、別途ボタンを用意してユーザがそのボタンを押した際に戻るようにしている)

@implementation DetailViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"Detail";
    self.navigationController.navigationBarHidden = YES;  // ナビゲーションバーを隠す処理
}

// 遷移前の画面に戻るためのボタンを押した時の処理
- (IBAction)goBack {
    self.navigationController.navigationBarHidden = NO;  // 元の画面に戻る際にナビゲーションバーを再表示
    [self.navigationController popViewControllerAnimated:YES];
}
@end


2. タブバーを隠す方法
画面を遷移させる直前に、遷移前の画面をコントロールするUIViewControllerのサブクラスで、タブバーを隠す設定をする(こちらは戻った時に再表示させる処理は不要)。

@implementation MostViewedController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    DetailViewController *dvc = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
    dvc.hidesBottomBarWhenPushed = YES;  // 画面遷移後にタブバーを隠すための処理
    [self.navigationController pushViewController:dvc animated:YES];
    [dvc release];
}
@end


上記の2つを同時に実装すると、画面遷移は以下のような形になる。
 

今回紹介した方法は、遷移後の画面で画像などをiPhoneの画面めいっぱい使って表示したい場合などに役に立つと思われる。


[備考]
今回紹介した方法と似たような事は、UIViewControllerのpresentModalViewControllerメソッドを利用して、モーダルビューを表示するという形でも実現可能である。
ただ、presentModalViewControllerメソッドを利用した場合には、モーダルビューが画面下から上にあがってくるようなアクションになる。このことから、テーブルビューとの親和性と言う意味では、今回紹介した方法の方が良いと思われる。


[関連記事]