Это, безусловно, возможно, и может сократить свой код примерно в два раза. В следующем примере используется автоматический макет для большой тяжелой работы.
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
является NSLayoutConstraint
, который связывает нижнюю часть моего текстового поля в нижней части моего зрения. Этот код оживляет поле вверх, когда клавиатура появляется и исчезает, когда она исчезает.
Все это было возможно в iOS < 8 с использованием комбинации UIKeyboardWillShowNotification
и UIKeyboardWillHideNotification
. Но! Как вы говорите, в iOS 8 представлен раздел QuickType, который может быть скомпенсирован или расширен пользователем. Это решение будет анимировать текстовое поле правильно, чтобы оно всегда было прикреплено к верхней части клавиатуры, независимо от того, открыт или нет QuickType.
хорошо один. cheers – Fattie
Есть ли способ контролировать, когда он прокручивается? На iphone 6 мне не нужны поля для прокрутки, когда пользователь редактирует верхнее текстовое поле, но когда редактирует нижнее текстовое поле, оно должно прокручиваться, чтобы освободить место. –
Используется ли 'UIViewAnimationOptions (UInt (кривая)) правильно? В документации говорится, что 'curve' является' UIViewAnimationCurve', и, глядя на определения, это, похоже, не соответствует значениям для 'UIViewAnimationOptions'. Более того, значение «кривая», возвращаемое на практике в этом уведомлении, равно '7' - частное/неопределенное значение, поэтому простой оператор switch для преобразования между ними не будет обрезать его ... –