Auf iOS 7. Ich habe Navigation Controller und ich schiebe einen neuen VC auf den Stapel._adjustContentOffsetIfNecessary - UIScrollView scrollt automatisch nach oben
Diese neue VC hat eine UIScrollView, die die Root-Ansicht der VC füllt und vertikal scrollt. Wenn ich ein wenig nach unten scrolle und dann versuche, 'swipe to back'/'swipe to pop' zu verwenden, scrollt die vertikale Bildlaufansicht zuerst nach oben, und dann wird der interactivePopGesture erkannt und ich kann den oberen VC auf den ziehen Stapel links und rechts.
Warum passiert das? Ich möchte verhindern, dass meine Bildlaufansicht automatisch nach oben scrollt, bevor die Geste "Wischen zum Zurückgehen" erkannt wird. Wie mache ich das?
UPDATE # 1:
Ich kann nicht scheinen, um diesen Fehler zu reproduzieren, wenn ich ein neues Xcode-Projekt zu erstellen, so ist es sicherlich Fehler meinerseits in dem ursprünglichen Projekt. Wird aktualisiert, wenn ich den Grund finde.
UPDATE # 2:
Wenn interactivePopGesture erkannt wird, wird setContentOffset
Methode auf meiner vertikalen Scroll-Ansicht genannt. Während des Debuggens sehe ich, dass setContentOffset
von UIScrollViewInternal _adjustContentOffsetIfNecessary
aufgerufen wurde.
UPDATE # 3:
Das gleiche Problem in einem folgenden Szenario passiert: Ich habe UITextFields innerhalb einer vertikalen UIScrollView. Wenn ein bestimmtes UITextField gedrückt wird, erscheint eine Tastatur. Wenn ich die Tastatur interaktiv verwerfen möchte (indem ich die Bildlaufansicht über die Tastatur ziehe), passiert nach dem Loslassen des Ziehens ein Fehler. Der Inhalts-Offset von UIScrollView wurde vorübergehend auf Null gesetzt und dann auf den ursprünglichen Inhalts-Offset zurückgesetzt und mit der Animation fortgefahren. Diese unerwünschte Einstellung von contentOffset
wird auch von UIScrollViewInternal _adjustContentOffsetIfNecessary
aufgerufen.
Ich ging voran und ersetzte die UIScrollView in beiden Szenarien mit meiner eigenen Unterklasse von UIScrollView. In dieser Unterklasse habe ich eine private Methode -(void) _adjustContentOffsetIfNecessary
als leere void-Methode überschrieben. Beide Probleme waren beseitigt, und ich konnte keine negativen Folgen feststellen. Dies ist keine Lösung und ich werde diesen Ansatz nicht verwenden, da ich keine Ahnung habe, was genau ich getan habe.
Kann etwas mit UIViewController SetAutomatisch AdjustScrollViewInsets api auf iOS7 –
Ich setze automatisch AdjustScrollViewInsets = NO; auf jeden Blick Controller dachte ich könnte für die Situation relevant sein. Es hilft nicht. – ancajic
Ich habe dieses Problem ebenfalls gelöst. Ich habe contentOffset manuell als (0, -64) festgelegt, aber _adjustContentOffsetIfNecessary hat es wieder in -108 geändert. Verwirrt. Irgendein Update? – Wingzero