Jest to z pewnością możliwe i może zmniejszyć swój kod tylko o połowę. Poniższy przykład wykorzystuje Automatyczny układ dla wielu podnoszenia ciężkich przedmiotów.
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
jest NSLayoutConstraint
, które wiąże się z głębi pola tekstowego na dole moim zdaniem. Ten kod animuje pole, gdy klawiatura pojawia się i znika, gdy znika.
Wszystko to było możliwe w iOS < 8 przy użyciu kombinacji UIKeyboardWillShowNotification
i UIKeyboardWillHideNotification
. Ale! Jak już mówisz, iOS 8 wprowadza sekcję QuickType, którą użytkownik może zwinąć lub rozwinąć. To rozwiązanie spowoduje prawidłowe animowanie pola tekstowego, tak aby zawsze było ono dołączone do górnej części klawiatury, niezależnie od tego, czy QuickType jest otwarty.
dobry. Pozdrawiam – Fattie
Czy istnieje sposób, aby kontrolować, kiedy przewija? W przypadku iPhone'a 6 nie trzeba przewijać pól, gdy użytkownik edytuje pole tekstowe w górnej części tekstu, ale gdy edytuje dolne pole tekstowe, powinien przewinąć w celu zrobienia miejsca. –
Czy użycie opcji UIViewAnimationOptions (UInt (curve)) jest poprawne? Dokumentacja mówi, że 'curve' jest' UIViewAnimationCurve', i patrząc na definicje, nie wydaje się, aby to było zgodne z wartościami dla 'UIViewAnimationOptions'. Jeszcze lepiej, wartość 'curve' zwrócona w praktyce w tym powiadomieniu to' 7' - wartość prywatna/niezdefiniowana, więc prosta instrukcja przełączania, aby przekonwertować między nimi, nie zmniejszy jej ... –