web-dev-qa-db-de.com

Unerwünschte Leerstelle links von UIScrollView auf dem iPhone X.

UIScrollView funktioniert ohne den Leerraum links auf allen iPads oder iPhones außer dem iPhone X. Wie kann ich den Leerraum entfernen?

Ich benutze Storyboards. Bounce On Scroll/Zoom sind alle deaktiviert. Kein weißer Raum auf dem iPad oder iPhone außer dem iPhone X. Ich denke, es könnte etwas mit der Safe Area-Sache zu tun haben.

 enter image description here

8
zsong

Nun, ich habe dieses Problem auf nicht elegante Weise gelöst. Aber es funktioniert wie ein Zauber. (Ich habe alle anderen Antworten ausprobiert. Vielen Dank für Ihre Hilfe, aber diese Antworten scheinen in meinem Fall nicht zu funktionieren.)

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
zsong

Das Festlegen der Einschränkung relativ zu safeArea ist für iPhone-X eine gute Praxis. So sagt Apple -

Wenn die Ansicht auf dem Bildschirm angezeigt wird, gibt diese Anleitung den Teil der Ansicht wieder, der nicht von Navigationsleisten, Registerkartenleisten, Symbolleisten und anderen Ansichten der Vorfahren abgedeckt wird.

In Ihrem Fall geben Sie die Bedingungen leading & trailing von scrollView mit safeArea, Not superView an.

Wenn Sie also das Risiko eingehen, superview anstelle von safeArea als Einschränkung zu verwenden, wird Ihr Objektinhalt möglicherweise abgeschnitten, insbesondere wenn Sie nach links drehen. Der Inhalt von ganz links wird unter der höchsten Stufe von iPhone-X abgeschnitten.

 enter image description here

Apple doc für safeAreaLayoutGuide

4
Jack

Dieser Abstand bezieht sich auf den sicheren Bereich, der links/rechts von UIScrollview als Inhalts-Einfügungen in Querformat auf dem iPhone X angewendet wird und mit der schreibgeschützten Eigenschaft UIScrollview.safeAreaInsets angezeigt werden kann.

Folgende Zeile kann verwendet werden, um sicherer Bereich Einsätze loszuwerden, wenn Sie nicht brauchen:

UIScrollview.contentInsetAdjustmentBehavior = .never

Der Standardwert UIScrollViewContentInsetAdjustmentBehavior.automatic enthält Seitenränder für Layoutrichtlinien für den sicheren Bereich als Inhaltseinfügungen.

Hinweis: Einschränkungen für das automatische Layout haben nichts mit den Einfügungen zu tun, sondern nur mit dem Anpassungsverhalten der Einfügungen in iOS 11 UIScrollview.

3
AamirR