web-dev-qa-db-ja.com

iPhoneXのUIScrollViewの左側にある不要な空白

UIScrollViewは、iPhone Xを除くすべてのiPadまたはiPhoneで、左側に空白がなくても正常に機能します。空白を削除するにはどうすればよいですか?

絵コンテを使っています。バウンスオンスクロール/ズームはすべて無効になっています。 iPadやiPhoneにはiPhoneX以外に空白はありません。セーフエリアに関連しているのではないかと思います。

enter image description here

10
zs2020

さて、私はこの問題をエレガントではない方法で解決しました。しかし、それは魅力のように機能します。 (私は他のすべての答えを試しました。あなたの助けに感謝します、しかしそれらの答えは私の場合はうまくいかないようです。)

var leftMargin: CGFloat = 0
var rightMargin: CGFloat = 0

if Device.isPhone() && Device.IS_5_8_INCHES() {
    self.leftMargin = 44
    self.rightMargin = 44
}

let frame = CGRect(
    x: (self.view.frame.width - self.leftMargin - self.rightMargin) * CGFloat(pageIndex),
    y: ...
)
1
zs2020

この間隔は、iPhone Xの横向きのコンテンツインセットとしてUIScrollviewの左右に適用される安全な領域からのものであり、読み取り専用プロパティUIScrollview.safeAreaInsetsを使用して表示できます。

次の行は、必要のないときに安全な領域のはめ込みを取り除くために使用できます:

UIScrollview.contentInsetAdjustmentBehavior = .never

デフォルト値のUIScrollViewContentInsetAdjustmentBehavior.automaticには、コンテンツのはめ込みとしてセーフエリアレイアウトガイドの余白が含まれています。

注:自動レイアウトの制約はインセットとは関係ありません。iOS11UIScrollviewコンテンツのインセット調整動作だけです。

14
AamirR

safeAreaに関連する制約を設定することは、iPhone-Xの良い習慣です。これがAppleの言い方-

ビューが画面に表示されている場合、このガイドには、ナビゲーションバー、タブバー、ツールバー、およびその他の祖先ビューでカバーされていないビューの部分が反映されます。

あなたの場合、leadingではなくtrailingscrollViewの制約safeAreasuperViewを与えています。

したがって、superviewではなくsafeAreaに制約を与えるリスクを冒すと、オブジェクトコンテンツがクリップされる可能性があります。特に左に回転すると、左端のコンテンツがiPhone-Xのノッチの下でクリップされます。

enter image description here

safeAreaLayoutGuideのAppleドキュメント

4
Jack