web-dev-qa-db-ja.com

iPhoneステータスバーの高さを取得する

IPhoneのステータスバーの高さに関連して、いくつかの要素のサイズを変更する必要があります。ステータスバーの高さは通常20ポイントですが、テザリングモードの場合はそうではありません。 40倍になります。高さを決定する適切な方法は何ですか?私はもう試した

[[UIApplication sharedApplication] statusBarFrame]

しかし、横向きでは20 x 480になりますが、縦向きでは320 x 40になります。なぜそれとは反対の(40 x 320)が与えられないのですか?

60
Kyle Decot

StatusBarFrameは、フレームを画面座標で返します。ビュー座標でこれが対応するものを取得する正しい方法は、次のことを行うことだと思います。

- (CGRect)statusBarFrameViewRect:(UIView*)view 
{
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];

    CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow: nil];

    CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView: nil];

    return statusBarViewRect;
}

現在、ほとんどの場合、ウィンドウは画面と同じ座標を使用するため、[UIWindow convertRect:fromWindow:]は何も変更しませんが、異なる可能性がある場合、このメソッドは正しいことを行う必要があります。

81
ThomasW

このようにしましたか:

CGRect rect;

rect = [[UIApplication sharedApplication] statusBarFrame];
NSLog(@"Statusbar frame: %1.0f, %1.0f, %1.0f, %1.0f", rect.Origin.x, rect.Origin.y, rect.size.width, rect.size.height);
15
o15a3d4l11s2

[〜#〜] edit [〜#〜]ビューコンテンツの先頭をどこに置くかを決定するiOS 11の方法は、UIViewのsafeAreaLayoutGuideIView Documentation を参照してください。

非推奨の回答iOS 7以降をターゲットにしている場合、UIViewControllerのドキュメントでは、viewControllerのtopLayoutGuideプロパティにより、ステータスバー、またはナビゲーションバーの下部(表示されている場合)。これは有用である可能性があり、以前の多くのソリューションよりも確実にハッキングが少ないです。

6

この方法は、縦向きと横向きに機能します。

-(float) statusBarHeight
{
    CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size;
    return MIN(statusBarSize.width, statusBarSize.height);
}

// example call
float statusBarHeight = [self statusBarHeight];
6
David Douglas

2つの値のうち小さい方、つまり実際の高さをテストできます。

5
Martin

Swift 2:

let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height

Swift 3またはSwift 4:

let statusBarHeight = UIApplication.shared.statusBarFrame.height

アドバイス:UIApplication.sharedは、コードでシングルトンを使用するだけではありません。

3
nsmeme

Swift必要な場合のバージョンは次のとおりです。

var screenStatusBarHeight: CGFloat {
    return UIApplication.sharedApplication().statusBarFrame.height
}

これは、次の標準変数として含まれています。

https://github.com/goktugyil/EZSwiftExtensions

免責事項:その私のレポ

0
Esqarrouth