ボタンがクリックされたときにステータス バーをスライドアウト (または非表示) にする必要があるビュー コントローラーを考えてみましょう。
- (void) buttonClick:(id)sender
{
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
}
上記はステータスバーを効果的に非表示にしますが、ルートビューのサイズを適切に変更せず、上部に 20 ピクセルのギャップを残します。
私が期待していたのは、ルート ビューが、ステータス バーによって以前に使用されていたスペース (ステータス バーのアニメーションと同じ長さのアニメーション) に拡張されることです。
これを行う適切な方法は何ですか?
(同様の質問がたくさんあることは承知していますが、ステータスバーを非表示にして新しいView Controllerを表示するのではなく、オンデマンドでステータスバーを非表示にすることについては何も見つかりませんでした)
「ブルートフォース」アプローチ
明らかに、次の作品...
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:0.25 animations:^{
CGRect frame = self.view.frame;
frame.origin.y -= 20;
frame.size.height += 20;
self.view.frame = frame;
}];
...しかし欠点があります:
- スライド アニメーションの長さをハードコードします
- ステータスバーの高さをハードコードします
- ルート ビューの原点は (0,-20) のままです。フレームは可能な限り (0,0) から開始するようにしています。
私がすでに試したこと
- ルート ビューの自動サイズ変更マスクに と があることを確認しまし
UIViewAutoresizingFlexibleTopMargin
たUIViewAutoresizingFlexibleHeight
。 [self.view setNeedsLayout]
ステータス バーを非表示にした後に呼び出されます。[self.view setNeedsDisplay]
ステータス バーを非表示にした後に呼び出されます。- ステータスバーを非表示にする前後に設定
wantsFullScreenLayout
します。YES