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

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

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

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

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

Кстати, пример использования UIKeyboardWillChangeFrameNotification qaru.site/info/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: 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.