1. ホーム
  2. アイオス

[解決済み】iOSのステータスバーの高さをプログラムで取得する方法

2022-04-01 23:56:56

質問

現在、iPhone/iPadの上部にあるステータスバー(時間、バッテリー、ネットワーク接続)は、非retinaスクリーンでは20ピクセル、retinaスクリーンでは40ピクセルであることは知っていますが、私のアプリを将来的に保証するために、値をハードコーディングせずにこれを決定できるようにしたいのです。ステータスバーの高さをプログラム的に把握することは可能でしょうか?

解決方法は?

[UIApplication sharedApplication].statusBarFrame.size.height . しかし、すべてのサイズはピクセル単位ではなくポイント単位であるため、ステータスバーの高さは常に20に等しくなります。

更新しました。 この回答が参考になると思われているところを見ると、詳しく説明したほうがよさそうですね。

ステータスバーの高さは、確かに、20.0f ポイントに相当します。 ただし 以下のような場合です。

  • でステータスバーが隠されています。 setStatusBarHidden:withAnimation: メソッドを使用し、その高さは0.0fポイントに等しくなります。
  • この@Antonが指摘したように、電話アプリケーション以外の着信時や録音セッション中のステータスバーの高さは40.0fポイントに相当します。

また、ステータスバーがビューの高さに影響するケースもあります。通常、ビューの高さは、指定された方向の画面寸法からステータスバーの高さを引いたものと同じです。しかし、ビューが表示された後にステータスバーをアニメーション化(表示または非表示)すると、ステータスバーはそのフレームを変更しますが、ビューは はしません。 そのため、ステータスバーのアニメーションの後(またはアニメーション中)に、手動でビューのサイズを変更する必要があります(ステータスバーの高さはアニメーションの開始時に最終値に設定されるため)。

アップデート2。 ユーザーインターフェースの向きのケースもありますね。ステータス・バーはオリエンテーションの値を尊重しないため、ステータス・バーの高さの値で ポートレート モードは [UIApplication sharedApplication].statusBarFrame.size.height (そう、アプリの info.plist が何と言おうと、デフォルトの向きは常にポートレートです)、一方 ランドスケープ - [UIApplication sharedApplication].statusBarFrame.size.width . の外側にいるときにUIの現在の向きを決定する。 UIViewControllerself.interfaceOrientation が利用できない場合は [UIApplication sharedApplication].statusBarOrientation .

iOS7に対応したアップデートを行いました。 ステータスバーのビジュアルスタイルが変わっても、そのフレームは変わらずに存在し、動作も同じです。ステータス・バーについて唯一興味深い発見がありましたので、ご紹介します。 UINavigationBar 's タイル状 の背景もステータスバーにタイル状に表示されるので、面白いデザイン効果を得たり、単にステータスバーに色をつけたりすることができます。これもまた、ステータスバーの高さには一切影響しません。