ステータスバーの表示/非表示の挙動 iOS6

たまにレイアウトがくずれたり、ナビゲーションバーがステータスバーの下に潜り込んだりするため、 いろいろなパターンで動作確認してみる

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

//    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

//    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

//    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];    
//    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

}
no viewWillAppear viewDidAppear viewWillDisappear viewDidDisappear 呼びもと モーダル
1 × ×
2 × ×
3 ×
4 ×

1

他のViewControllerに迷惑をかけないように、viewDidAppearと、viewWillDisappearで行う

×モーダルビューのレイアウトもstatus barの領域が残ったまま

×モーダルの場合、呼びもとのviewWillAppearではstatus barが隠れた状態のサイズとなる。

2

×モーダルビューはレイアウトがstatus barの領域が残ったまま

×呼び出しもとは全画面レイアウトした後にstatus barが表示されるためヘッダーが刺さる

3

○モーダルビュー側は問題なし

×モーダルの場合、呼びもとのviewWillAppearではstatus barが隠れた状態のサイズとなる。

4

○モーダルビュー側は問題なし

×呼び出しもとは全画面レイアウトした後にstatus barが表示されるためヘッダーが刺さる

考察

viewのライフサイクル中にやるのは良くないのかな。

viewWillAppearで自分の領域は全画面と宣言をし、離れる場合(閉じるボタン謳歌など)はそのタイミングで、 もとに戻してあげるのが正しいのかな。

ただし、もともと全画面状態から遷移だったり、次の画面が全画面かどうかわからないため、ポリシーの問題でもあるきがする。

今回は、モーダルビューだったので、閉じる用のdelegateを呼ぶ箇所で、setStatusBarHidden:NOをしていすると想定通りの挙動となった。

- (void)closeView
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
    [self.delegate viewControllerDidClosed:self];
}

- (IBAction)tappedCloseButton:(id)sender
{
    [self closeView];
}

0 件のコメント:

コメントを投稿

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...