286

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

4

15 に答える 15

517

[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です。UIViewControllerおよびの外側にあるときに UI の現在の向きを決定するにself.interfaceOrientationは、 を使用します[UIApplication sharedApplication].statusBarOrientation

iOS7にアップデート。ステータス バーのビジュアル スタイルは変更されましたが、ステータス バーはそのままで、フレームの動作も同じです。ステータス バーに関する唯一の興味深い発見 – 共有:UINavigationBarタイル張りの背景もステータス バーにタイル張りされるため、興味深いデザイン効果を実現したり、ステータス バーに色を付けたりできます。これも、ステータス バーの高さにはまったく影響しません。

ナビゲーション バーのタイル張りの背景は、ステータス バーにもタイル張りされます

于 2012-10-20T19:36:22.257 に答える
23

これを試して:

CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
于 2012-10-20T19:36:42.230 に答える
10

編集 ビューコンテンツの上部を配置する場所を解決するiOS 11の方法は、UIViewのsafeAreaLayoutGuideSee UIView Documentationです。

非推奨の回答 iOS 7 以降をターゲットにしている場合、 UIViewController のドキュメントでは、viewController のtopLayoutGuideプロパティによって、ステータス バーの下部、またはナビゲーション バーも表示されている場合はその下部が表示されるとアドバイスされています。それは役に立つかもしれませんし、以前のソリューションの多くよりもハックが少ないことは確かです.

于 2014-12-09T02:26:06.577 に答える
5

ステータスバーのフレームが画面の座標空間にあることを忘れないでください!横向きモードで起動すると、幅と高さが入れ替わっている場合があります。横向きをサポートしている場合は、代わりにこのバージョンのコードを使用することを強くお勧めします。

CGRect statusBarFrame = [self.window convertRect:[UIApplication sharedApplication].statusBarFrame toView:view];

その後、statusBarFrameのheightプロパティを直接読み取ることができます。この場合の「ビュー」は、測定値を使用するビューである必要があります。ほとんどの場合、アプリケーションウィンドウのルートビューコントローラーです。

ちなみに、通話中はステータスバーが高くなるだけでなく、ステータスバーが意図的に非表示になっている場合はゼロになることもあります。

于 2013-02-04T17:45:06.740 に答える
0

デフォルトでは、iOS のステータス バーの高さは です20 pt

詳細: http://www.idev101.com/code/User_Interface/sizes.html

于 2013-10-03T07:49:40.413 に答える
0

ステータスバーの高さに直接アクセスせずに計算できる方法を見つけました。

ナビゲーション バーの高さ - topLayoutGuide の長さ = ステータス バーの高さ

迅速:

let statusBarHeight = self.topLayoutGuide.length-self.navigationController?.navigationBar.frame.height

self.topLayoutGuide.lengthは半透明のバーで覆われる上部の領域で、self.navigationController?.navigationBar.frame.heightステータス バーを除いた半透明のバーで、通常は 44pt です。したがって、この方法を使用すると、通話によるステータスバーの高さの変化を気にすることなく、ステータスバーの高さを簡単に計算できます。

于 2015-07-20T20:55:02.933 に答える