たまにレイアウトがくずれたり、ナビゲーションバーがステータスバーの下に潜り込んだりするため、 いろいろなパターンで動作確認してみる
- (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 件のコメント:
コメントを投稿