回答:
[UIApplication sharedApplication].statusBarFrame.size.height
。ただし、すべてのサイズはピクセル単位ではなくポイント単位であるため、ステータスバーの高さは常に20になります。
更新。この回答が役に立ったと思われるので、詳しく説明します。
ステータスバーの高さは、実際には20.0fポイントです。 次の場合を除いて。
setStatusBarHidden:withAnimation:
メソッドで非表示にされており、その高さは0.0fポイントです。ビューの高さに影響を与えるステータスバーのケースもあります。通常、ビューの高さは、特定の向きのスクリーンの寸法からステータスバーの高さを引いたものに等しくなります。ただし、ビューが表示された後にステータスバーをアニメーション化(表示または非表示)すると、ステータスバーはフレームを変更しますが、ビューは変更されません。ん。ステータスバーのアニメーション後(またはアニメーション以降)、ビューのサイズを手動で変更する必要があります。ステータスバーの高さはアニメーションの開始時に最終値に設定されます)。
アップデート2。ユーザーインターフェース指向のケースもあります。ステータスバーは向きの値を考慮しないため、縦[UIApplication sharedApplication].statusBarFrame.size.height
向きモードのステータスバーの高さの値は(はい、デフォルトの向きは、アプリのinfo.plistの内容に関係なく、常に縦向きです)、横向き - [UIApplication sharedApplication].statusBarFrame.size.width
です。UIの現在の向きを決定する際に外のUIViewController
とself.interfaceOrientation
使用できない、使用[UIApplication sharedApplication].statusBarOrientation
。
iOS7のアップデート。ステータスバーの表示スタイルが変わっても、ステータスバーは表示されますが、フレームの動作は変わりません。私が得たステータスバーに関する唯一の興味深い発見–私は共有します:あなたUINavigationBar
ののタイル張りの背景もステータスバーに並べて表示されるため、興味深いデザイン効果を実現したり、ステータスバーに色を付けることができます。これも、ステータスバーの高さに影響を与えることはありません。
一緒に行くの質問にマーティンの提案:iPhoneのステータスバーの高さを取得します。
CGFloat AACStatusBarHeight()
{
CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size;
return MIN(statusBarSize.width, statusBarSize.height);
}
そしてスウィフトでは
func statusBarHeight() -> CGFloat {
let statusBarSize = UIApplication.shared.statusBarFrame.size
return Swift.min(statusBarSize.width, statusBarSize.height)
}
ハックのように見えますが、実際にはかなりしっかりしています。とにかく、それが唯一の実用的なソリューションです。
次のコードは、 UIViewController
ランドスケープをサポートするためにほぼ機能しました。しかし、コーナーケース(右から回転した場合>サポートされていない上下逆>左)が機能しない(高さと幅が切り替わる)ことに気付きました。
BOOL isPortrait = self.interfaceOrientation == UIInterfaceOrientationPortrait;
CGSize statusBarSize = [UIApplication sharedApplication].statusBarFrame.size;
CGFloat statusBarHeight = (isPortrait ? statusBarSize.height : statusBarSize.width);
statusBarFrame
変換前の値として返されます。
var statusBarHeight: CGFloat
これを試して:
CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
ステータスバーの高さは通常20ポイントですが、状況によってはその2倍になる場合があります。
試してみてください。高さを20ptにハードコーディングしても、機能しないまでは機能します。
だから私はH2CO3の答えを2番目に:
statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
編集
ビューコンテンツの上部に配置する場所を決めるiOS 11の方法は、UIViewのsafeAreaLayoutGuide
「UIViewドキュメントを参照」です。
非推奨ANSWER
あなたはiOSの7+をターゲットに設定している場合、のUIViewControllerのドキュメントはのViewControllerのことをアドバイスしtopLayoutGuide
、それはまた、目に見えるかどうプロパティは、あなたのステータスバーの下、またはナビゲーションバーの下を与えます。これは役に立つかもしれず、確かに以前の多くのソリューションよりもハックが少ないです。
ステータスバーのフレームが画面の座標空間にあることを忘れないでください!横モードで起動すると、幅と高さが入れ替わることがあります。横向きをサポートする場合は、代わりにこのバージョンのコードを使用することを強くお勧めします。
CGRect statusBarFrame = [self.window convertRect:[UIApplication sharedApplication].statusBarFrame toView:view];
その後、statusBarFrameのheightプロパティを直接読み取ることができます。このインスタンスの「ビュー」は、測定値を使用するビューである必要があります。おそらく、アプリケーションウィンドウのルートビューコントローラーです。
ちなみに、ステータスバーは、通話中により高くなるだけでなく、意図的に非表示にされている場合はゼロになることもあります。
画面のステータスバーの高さを取得するSwiftの方法を次に示します。
var screenStatusBarHeight: CGFloat {
return UIApplication.sharedApplication().statusBarFrame.height
}
これらは私のプロジェクトの標準機能として含まれています:https : //github.com/goktugyil/EZSwiftExtensions
ステータスバーの高さに直接アクセスするのではなく、計算する方法を見つけました。
ナビゲーションバーの高さ-topLayoutGuideの長さ=ステータスバーの高さ
迅速:
let statusBarHeight = self.topLayoutGuide.length-self.navigationController?.navigationBar.frame.height
self.topLayoutGuide.length
半透明のバーで覆われている上部の領域でself.navigationController?.navigationBar.frame.height
あり、ステータスバーを除く半透明のバーです。通常は44ptです。したがって、この方法を使用すると、電話によるステータスバーの高さの変化を気にすることなく、ステータスバーの高さを簡単に計算できます。
self.topLayoutGuide.length
0なので結果は-44になります。
次の1行のコードを使用すると、ステータスバーの高さを任意の方向で取得できます。
#define STATUS_BAR_HIGHT (
[UIApplicationsharedApplication].statusBarHidden ? 0 : (
[UIApplicationsharedApplication].statusBarFrame.size.height > 100 ?
[UIApplicationsharedApplication].statusBarFrame.size.width :
[UIApplicationsharedApplication].statusBarFrame.size.height
)
)
シンプルですが非常に便利なマクロです。追加のコードを記述する必要はありません。