2014-10-11 13 views
10

Angesichts der neuen QuickType-Abschnitt der Tastatur.Verwenden nur UIKeyboardWillChangeFrameNotification Benachrichtigung

Ist es richtig, daß ein NUR eine Benachrichtigung für UIKeyboardWillChangeFrameNotification,

und einfach „nicht die Mühe mit dem“ „älteren“ UIKeyboardWillShowNotification und UIKeyboardWillHideNotification verwenden kann?

Tests scheinen zu zeigen, dass es perfekt funktioniert, mit ONLY keyboardFrameDidChange - aber wir könnten etwas verpassen?

BTW hier ist ein Beispiel dafür, wie UIKeyboardWillChangeFrameNotification https://stackoverflow.com/a/26226732/294884

Antwort

33

Es ist auf jeden Fall möglich zu verwenden und den Code nur etwa halbiert werden. Im folgenden Beispiel wird Auto Layout für eine Vielzahl von Schwertransporten verwendet.

NSNotificationCenter.defaultCenter().addObserverForName(
    UIKeyboardWillChangeFrameNotification, 
    object: nil, 
    queue: nil 
) { (notification) in 
    var userInfo = notification.userInfo! 

    let frameEnd = userInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue 
    let convertedFrameEnd = self.view.convertRect(frameEnd, fromView: nil) 
    let heightOffset = self.view.bounds.size.height - convertedFrameEnd.origin.y 
    self.messageFieldBottomConstraint.constant = heightOffset 

    let curve = userInfo[UIKeyboardAnimationCurveUserInfoKey]!.unsignedIntValue 
    let options = UIViewAnimationOptions(rawValue: UInt(curve) << 16) 

    UIView.animateWithDuration(
     userInfo[UIKeyboardAnimationDurationUserInfoKey]!.doubleValue, 
     delay: 0, 
     options: options, 
     animations: { 
      self.view.layoutIfNeeded() 
     }, 
     completion: nil 
    ) 
} 

self.messageFieldBottomConstraint ist ein NSLayoutConstraint, die die Unterseite meines Textfeld auf den Grund meiner Sicht bindet. Dieser Code animiert das Feld nach oben, wenn die Tastatur angezeigt wird, und nach unten, wenn es ausgeblendet wird.

All dies war möglich in iOS < 8 mit einer Kombination von UIKeyboardWillShowNotification und UIKeyboardWillHideNotification. Aber! Wie Sie sagen, führt iOS 8 den Abschnitt QuickType ein, der vom Benutzer reduziert oder erweitert werden kann. Diese Lösung animiert das Textfeld korrekt, so dass es immer an der Spitze der Tastatur hängt, unabhängig davon, ob QuickType geöffnet ist oder nicht.

+1

guten einen. Prost – Fattie

+0

Gibt es eine Möglichkeit zu steuern, wenn es scrollt? Auf dem iPhone 6 brauche ich nicht die Felder zu scrollen, wenn der Benutzer am obersten Textfeld bearbeitet, aber wenn das untere Textfeld bearbeiten, sollte es scrollen, um Platz zu machen. –

+0

Ist die Verwendung von 'UIViewAnimationOptions (UInt (curve)) 'korrekt? Die Dokumentation besagt, dass "curve" eine "UIViewAnimationCurve" ist, und bei Betrachtung der Definitionen scheint dies nicht mit den Werten für "UIViewAnimationOptions" übereinzustimmen. Noch besser ist der 'Kurven'-Wert, der in der Praxis in dieser Benachrichtigung zurückgegeben wird,' 7' - ein privater/undefinierter Wert, so dass eine einfache switch-Anweisung, die zwischen ihnen konvertiert wird, nicht abschneidet ... –