現在、iPhone/iPad の上部にあるステータス バー (時間、バッテリー、ネットワーク接続) は、非 Retina 画面では 20 ピクセル、Retina 画面では 40 ピクセルであることはわかっていますが、アプリの将来性を確保するため、ハード コーディング値を使用せずにこれを決定できるようにしたいと考えています。ステータス バーの高さをプログラムで計算することは可能ですか?
ベストアンサー1
[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 の現在の向きを決定するには、 を使用します。UIViewController
self.interfaceOrientation
[UIApplication sharedApplication].statusBarOrientation
iOS7 用のアップデート。ステータス バーのビジュアル スタイルは変更されましたが、ステータス バーはそのまま残っており、フレームの動作も変わりません。ステータス バーに関して私が発見した唯一の興味深い点は、タイル化されたUINavigationBar
背景がステータス バーにもタイル化されるため、興味深いデザイン効果を実現したり、ステータス バーに色を付けたりできることです。これも、ステータス バーの高さにはまったく影響しません。