Nach dem Wechsel zu iOS8 bekomme ich seltsames Verhalten, wenn ich während eines Tastaturübergangs Ansichten verschiebe. Kann mir jemand erklären, was vor sich geht?
Hier ist ein minimales Beispiel, um das Problem zu demonstrieren. Ich habe eine einfache Ansicht mit einem UITextField
und einem UIButton
. Die Funktion nudgeUp
verschiebt das Textfeld und die Schaltfläche um 10 Punkte. Es wird entweder vom buttonPressed
Callback oder vom keyboardWillShow
Callback ausgelöst.
Wenn ich auf die Schaltfläche tippe, funktioniert der Code wie erwartet: buttonPressed
ruft nudgeUp
auf und die Schaltfläche und das Textfeld springen um 10 Punkte nach oben.
Wenn ich auf das Textfeld tippe, ruft keyboardWillShow
nudgeUp
auf, aber das Verhalten ist sehr unterschiedlich. Die Schaltfläche und das Textfeld springen sofort um <10> nach unten und dann wieder zurück in ihre ursprüngliche Position, wenn sich die Tastatur selbst zeigt.
Warum passiert das? Wie kann ich die Steuerung von Animationen während der Tastaturpräsentation in iOS8 wieder erreichen?
%Vor%Es ist AutoLayout. Etwas hat sich in iOS8 geändert und du kannst Frame- oder Mittelpunkte nicht mehr ändern, wenn du AutoLayout aktiviert hast. Sie müssen einen Auslass Ihrer Einschränkung (vertikaler Raum) erstellen und ihn entsprechend aktualisieren, anstatt die Rahmenposition zu ändern. Constraints sind wie jede andere UI-Steuerung und können eine Steckdose haben. Constraint Change kann animiert werden.
Beispiel:
%Vor% Sie sollten UIKeyboardDidShowNotification
verwenden (Sie verwenden will
version) und alles funktioniert wie erwartet:
Die Erklärung ist, dass Sie mit UIKeyboardWillShowNotification
die Frames zu früh ändern. Nach Ihren Änderungen wird das System alles neu ausgeben, um die Tastatur aufzunehmen und Ihre Änderungen werden keine Wirkung haben.
Ich empfehle Ihnen auch, zum automatischen Layout zu wechseln und Frames zu vergessen.
Versuchen Sie, mit UIKeyboardWillShowNotification userInfo den Rahmen der Tastatur anzugeben. Dann verschieben Sie die Bildschirmelemente basierend darauf.
Tags und Links animation ios8 uikeyboard