2017-11-29 45 views
0

私はNavigationBarのように使うheaderviewというUIViewを持っています。それは60の一定のサイズと左/右/レイアウトの制約が0です。安全なエリアのレイアウトのため、iPhone Xを除くすべてのデバイスに問題はないようです。サイズを90に変更すると、iPhone Xでは大丈夫ですが、他のデバイスでは間違っています。私は下のコードで安全な領域の高さを計算し、それを高さに追加しますが、他のデバイスでは小さく見えます。この問題を解決する最良の方法は何ですか?iPhone Xのセーフエリアガイド付きUIViewの高さを計算する

if (@available(iOS 11.0, *)) { 
    UIWindow *window = UIApplication.sharedApplication.keyWindow; 
    CGFloat topPadding = window.safeAreaInsets.top; 
    self.headerViewHeight.constant = 46 + topPadding; 
} 
+0

'60 + topPadding 'にする必要はありませんか? – Simon

+0

はい、しかし、私がそれを好きなのは、topPaddingが44であるからです。結果は、実際のサイズよりも104ほど大きくなります。 –

答えて

2

これを試してみてください。電話がiPhoneXであるかをチェック(より大きいトップのパディング0 iPhoneX場合)

if (@available(iOS 11.0, *)) { 
    UIWindow *window = UIApplication.sharedApplication.keyWindow; 
    CGFloat topPadding = window.safeAreaInsets.top; 
    self.headerViewHeight.constant = (topPadding>0) ? 46+topPadding : 60; 
} 
+0

私はこのようなことをして、それは働いたが、わからないそれは最高のアプローチです:) –

+0

ええ私は同じ考えている。いくつかの研究をしてください – user6788419

1

使用この(SWIFT 3):それは他のすべてのデバイスのためにあなたの標準的な高さ64を与える

constraint_heightTopBar.constant = UIApplication.shared.statusBarFrame.maxY + 44 

とあなたの必要に応じて値 '44'を調整することができます。
ステータスバーの高さは他のデバイスでは20、PhoneXでは44であることを忘れないでください。必要に応じてビューの高さを設定するだけで済みます。
すべてのiOSバージョンとすべてのデバイスで動作します:-)

objCの場合、CGRectGetMaxY(フレーム)を使用してください。

関連する問題