2017-12-20 6 views
3

Ich habe ein Problem mit UIScrollView auf iPhone X, iOS 11.2 (Simulator)iOS 11, prallt iPhone X. UIScrollView in einer falschen Richtung, wenn Content Einstellung

habe ich bemerkt, dass es passiert, wenn ich nicht scrollView.contentInsetAdjustmentBehavior = .never gesetzt habe .

Ich möchte eine einfache Animation von Scroll-Elementen implementieren und ein anderes Element hineinschieben. Offenbar, wenn ich contentOffset animatedly zu schätzen ändern (0, 546) ich ein wenig Schlag bekommen (überprüfen Bild):

incorrect behaviour

, die durch Protokolle bestätigt zu sein scheint:

scrollToBottom: insets top: 0.00; bottom: 74.00; left: 0.00; right: 0.00; 
scrollToBottom: yPos 546.0 
scrollToBottom: contentSize(375.0, 1240.0) self.height 768.0 
scrollViewDidScroll: contentOffset (0.0, 496.333333333333) 
scrollViewDidScroll: contentOffset (0.0, 486.0) 
scrollViewDidScroll: contentOffset (0.0, 487.0) 
scrollViewDidScroll: contentOffset (0.0, 489.0) 
scrollViewDidScroll: contentOffset (0.0, 491.333333333333) 
scrollViewDidScroll: contentOffset (0.0, 494.333333333333) 
scrollViewDidScroll: contentOffset (0.0, 498.0) 
scrollViewDidScroll: contentOffset (0.0, 501.666666666667) 
scrollViewDidScroll: contentOffset (0.0, 506.0) 
scrollViewDidScroll: contentOffset (0.0, 510.333333333333) 
scrollViewDidScroll: contentOffset (0.0, 514.333333333333) 

Wie Sie es sehen können, um 10 Einheiten springen zu Beginn 496 -> 486 -> und steigen jetzt.

Wenn (mit genau dem gleichen Code) einfügen I größeres Element - alles ist in Ordnung (Bild überprüfen):

normal behaviour

und Protokolle:

scrollToBottom: insets top: 0.00; bottom: 214.00; left: 0.00; right: 0.00; 
scrollToBottom: yPos 826.0 
scrollToBottom: contentSize(375.0, 1380.0) self.height 768.0 
scrollViewDidScroll: contentOffset (0.0, 498.666666666667) 
scrollViewDidScroll: contentOffset (0.0, 506.0) 
scrollViewDidScroll: contentOffset (0.0, 518.333333333333) 
scrollViewDidScroll: contentOffset (0.0, 534.666666666667) 
scrollViewDidScroll: contentOffset (0.0, 555.0) 
scrollViewDidScroll: contentOffset (0.0, 578.666666666667) 
scrollViewDidScroll: contentOffset (0.0, 604.666666666667) 
scrollViewDidScroll: contentOffset (0.0, 632.333333333333) 
scrollViewDidScroll: contentOffset (0.0, 661.0) 

Der Code dafür ist eher simple: setup initial elements, setze content offset, bekomme delegate call über fertige animation, schiebe neues element ein.

Es scheint, wenn ich das Einstellungsverhalten der Inhaltseinfügung abstelle, tritt es nicht auf, aber in diesem Fall muss ich mich mit Einsätzen selbst befassen. Dies scheint auf iPhone 6 mit iOS 11.1 nicht zu passieren.

Haben Sie irgendwelche Ideen, warum dies passiert und wie Sie es beheben können?

Antwort

0

Beantworten meiner eigenen Frage.

Das Problem war, in einer Kombination von contentSize und contentOffset Berechnung auf iPhone X.

I Offset rechnet und dann contentSize neu berechnet wird. Es gab eine Diskrepanz in "new" contentSize und so, wenn ich versuchte zu scrollen (setContentOffset(_:animated:)) Ich änderte gleichzeitig contentSize leicht (für 10 Punkte, die Sie in Protokollen sehen können) und den Bounce-Effekt zu bekommen.

Offenbar für größere Scroll-Distanz 10 Punkte waren nicht so signifikant und so wurden sie "interpoliert" weg.

0

Setzen Sie einfach ContentInsets - Automatisch für scrollView \ tableView

Verwandte Themen