IPhoneのステータスバーの高さに関連して、いくつかの要素のサイズを変更する必要があります。ステータスバーの高さは通常20ポイントですが、テザリングモードの場合はそうではありません。 40倍になります。高さを決定する適切な方法は何ですか?私はもう試した
[[UIApplication sharedApplication] statusBarFrame]
しかし、横向きでは20 x 480になりますが、縦向きでは320 x 40になります。なぜそれとは反対の(40 x 320)が与えられないのですか?
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:]
は何も変更しませんが、異なる可能性がある場合、このメソッドは正しいことを行う必要があります。
このようにしましたか:
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);
[〜#〜] edit [〜#〜]ビューコンテンツの先頭をどこに置くかを決定するiOS 11の方法は、UIViewのsafeAreaLayoutGuide
IView Documentation を参照してください。
非推奨の回答iOS 7以降をターゲットにしている場合、UIViewControllerのドキュメントでは、viewControllerのtopLayoutGuide
プロパティにより、ステータスバー、またはナビゲーションバーの下部(表示されている場合)。これは有用である可能性があり、以前の多くのソリューションよりも確実にハッキングが少ないです。
この方法は、縦向きと横向きに機能します。
-(float) statusBarHeight
{
CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size;
return MIN(statusBarSize.width, statusBarSize.height);
}
// example call
float statusBarHeight = [self statusBarHeight];
2つの値のうち小さい方、つまり実際の高さをテストできます。
Swift 2:
let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height
Swift 3またはSwift 4:
let statusBarHeight = UIApplication.shared.statusBarFrame.height
アドバイス:UIApplication.shared
は、コードでシングルトンを使用するだけではありません。
Swift必要な場合のバージョンは次のとおりです。
var screenStatusBarHeight: CGFloat {
return UIApplication.sharedApplication().statusBarFrame.height
}
これは、次の標準変数として含まれています。
https://github.com/goktugyil/EZSwiftExtensions
免責事項:その私のレポ