Использование только уведомления UIKeyboardWillChangeFrameNotification

Учитывая новый раздел QuickType на клавиатуре.

Верно ли, что можно использовать ТОЛЬКО уведомление для UIKeyboardWillChangeFrameNotification,

и просто "не беспокоиться" с "более старым" UIKeyboardWillShowNotification и UIKeyboardWillHideNotification?

Тестирование показало, что он работает отлично, используя ТОЛЬКО keyboardFrameDidChange - но мы могли что-то упустить?

Кстати, пример использования UIKeyboardWillChangeFrameNotification qaru.site/questions/182461/...

1 ответ

Это определенно возможно и может сократить ваш код примерно вдвое. В следующем примере используется автоматический макет для большой тяжелой работы.

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: ****(curve) << 16)
 UIView.animateWithDuration(
 userInfo[UIKeyboardAnimationDurationUserInfoKey]!.***********,
 delay: 0,
 options: options,
 animations: {
 self.view.layoutIfNeeded()
 },
 completion: nil
 )
}

self.messageFieldBottomConstraint - это NSLayoutConstraint, который привязывает нижнюю часть моего текстового поля к нижней части моего представления. Этот код оживляет поле вверх, когда клавиатура появляется и исчезает, когда она исчезает.

Все это было возможно в iOS < 8, используя комбинацию UIKeyboardWillShowNotification и UIKeyboardWillHideNotification. Но! Как вы говорите, в iOS 8 представлен раздел QuickType, который может быть скомпенсирован или расширен пользователем. Это решение будет анимировать текстовое поле правильно, чтобы оно всегда было прикреплено к верхней части клавиатуры, независимо от того, открыт или нет QuickType.

licensed under cc by-sa 3.0 with attribution.