4

iOS v5 ユニバーサル アプリで statusBar を切り替えたいと思っていました。

しかし、他の人がUIViews(私の場合はメインビューに追加されたサブビュー)を持っているように見えるので、デバイスを回転させた場合、非表示のstatusBarによって残された20pxのみを再利用します(私はシミュレーターを使用しています)

そして、私の見解はプログラムで行われます。

グーグルで見つけたいくつかの提案を試しましたが、どれもうまくいかないようでした。つまり、自動サイズ変更/マスクの変更、wantsFullScreenLayout、setNeedsLayout、IB の「全画面表示を使用」。

ビューの フレームの高さ0に設定していて、さが[[UIScreen mainScreen] applicationFrame] size.heightに制限されていることに最終的に気付きました。

私が思いついたのは、ビューフレームの高さ-20に設定し、高さ[[UIScreen mainScreen] applicationFrame] size.height+20に制限することです

ビューでDidLoad.

CGRect theDeviceRect= [[UIScreen mainScreen] applicationFrame];
newMap.frame = CGRectMake(0, -20, theDeviceRect.size.width, theDeviceRect.size.height+20);

これはwillAnimateRotationToInterfaceOrientation:デリゲートにもあります。

ステータスバーを次のように切り替えると:

- (void) toggleStatusBarAction:(id)sender{
  BOOL istathidden=  [[UIApplication sharedApplication] isStatusBarHidden];

   [[UIApplication sharedApplication] setStatusBarHidden:!istathidden withAnimation:UIStatusBarAnimationFade];
    }

すべてが期待どおりに機能します。しかし、私の解決策がこれについての良い方法なのか悪い方法なのか、そして何かが欠けているのかどうかを確認したかったのですか?:

よろしくお願いします。MH

4

1 に答える 1

7

私がすることは:

このコードの後:

[[UIApplication sharedApplication] setStatusBarHidden:NO];

私はすぐに実行します:

CGRect originalFrame = self.view.frame;
originalFrame.origin.y = 20.0;
self.view.frame = originalFrame;

これは、フレームを正しい位置に「リフレッシュ」するようなものです。最善の解決策ではありませんが、機能します。

あなたの例では、 istathidden に応じて y を 0 または 20 に動的に設定する必要がある場合があります。

2012 年 9 月 2 日に編集: モーダル ビュー コントローラーを閉じるときのより良い解決策:

[[UIApplication sharedApplication] setStatusBarHidden:NO];
self.view.frame = [[UIScreen mainScreen] applicationFrame];
于 2012-01-07T09:19:07.280 に答える