iPhoneに内蔵されているPhotosアプリのように、画像をフルスクリーンで表示する際
ステータスバーを隠すため、setStatusBarHidden:を呼び出すことがあります。
ステータスバーをhidden=YESにしたとき、ナビゲーションバーの位置はそのままですが、
ここで、Homeボタンを押し、もう一度アプリを起動すると
ナビゲーションバーの位置はステータスバーの無いwindowでの位置に移動してしまいます。
また、フルスクリーンのViewをFadeoutするときに、ステータスバーをhidden=NOにしても
ナビゲーションバーの位置は動かず、ステータスバーの裏に表示されます。
どうやらiosのステータスバーの表示・非常時とナビゲーションバーの位置の移動は
連動しないように設計されているようです。
ですが、繰り返しになりますが、
アプリをバックグラウンドへまわしてもう一度フォアグラウンドへ戻したときは
ナビゲーションバーの位置が新しくセットされてしまうので、
この点は注意しなければいけないようです。
VIDEO
結局ステータスバーをhidden=NOにするときに一度ナビゲーションバーを非表示にし、すぐに表示しなおすことで
位置の修正をしました。
VIDEO
@implementation FirstViewController{ UIView *overView; } #pragma mark - View lifecycle - (void)loadView { [super loadView]; UIApplication *app = [UIApplication sharedApplication]; overView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; overView.backgroundColor = [UIColor whiteColor]; overView.alpha = 0.0f; overView.userInteractionEnabled = NO; [app.keyWindow addSubview:overView]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UIApplication *app = [UIApplication sharedApplication]; if(app.statusBarHidden == NO){ [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; [UIView animateWithDuration:0.4f animations:^(void){ overView.alpha = 1.0f; }]; } else { [app setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; // hiding / showing navigationBar [self.navigationController setNavigationBarHidden:YES]; [self.navigationController setNavigationBarHidden:NO]; [UIView animateWithDuration:0.4f animations:^(void){ overView.alpha = 0.0f; }]; } }