Auf iOS 7. Ich habe Navigationscontroller und ich schiebe einen neuen VC auf den Stapel.
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 Stack 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 diesen Fehler anscheinend nicht reproduzieren, wenn ich ein neues xcode-Projekt erstelle, daher ist es sicher ein Fehler in meinem ursprünglichen Projekt. Wird aktualisiert, wenn ich den Grund finde.
UPDATE # 2:
Wenn interactivePopGesture erkannt wird, wird setContentOffset
method für meine vertikale Bildlaufansicht aufgerufen. Während des Debugging sehe ich, dass setContentOffset
von UIScrollViewInternal _adjustContentOffsetIfNecessary
aufgerufen wurde.
UPDATE # 3:
Dasselbe Problem tritt in einem folgenden Szenario auf:
Ich habe UITextFields in einem 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 durch meine eigene 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.
Ich habe eine interessante Diskussion dazu auf Twitter gefunden. Obwohl es nicht mein Fall ist, könnte es jemandem helfen:
%Vor%Verwenden Sie UIViewController mit einem UITableView anstelle von UITableViewController. Es löste mein Problem:)
Tags und Links ios7 uiscrollview interactivepopgesture