Получить высоту клавиатуры не работает на бета-версии IOS 11

У меня есть следующий код, который работал на IOS 10, но теперь он больше не работает при запуске на бета-версии IOS 11.

if let userInfo = notification.userInfo {
    if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        print(keyboardSize)
    }
}

Это то, что я получаю, когда печатаю размер:

(0.0, 0.0, 0.0, 0.0)
(0.0, 736.0, 414.0, 0.0)

Кто-нибудь знает, почему это перестало работать? Или, если у меня есть другие альтернативы, чтобы получить размер клавиатуры?

Ответы

Ответ 1

Используйте UIKeyboardFrameEndUserInfoKey вместо UIKeyboardFrameBeginUserInfoKey

Таким образом, изменение вашего кода на следующее приведет к устранению проблемы:

if let userInfo = notification.userInfo {
    if let keyboardSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        print(keyboardSize)
    }
}

Ответ 2

У меня такая же проблема. Ответ Дуга Амоса прав. Я просто хочу сделать это яснее. Вот мой код:

@objc func keyboardWillShow(notification:NSNotification){

        var userInfo = notification.userInfo!
        var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
        if keyboardFrame.size.height <= 0 { // to fix bug on iOS 11
            keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
        }
        keyboardFrame = self.view.convert(keyboardFrame, from: nil)
    }

Ответ 3

Я использовал этот код в своем приложении с Swif 3 +

    var userInfo = notification.userInfo
    if let keyboardFrame = (userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue{
        print(keyboardFrame.height)
        if keyboardFrame.size.height <= 0 { // To fix bug on iOS 11
            if let newKeyboardFrame = (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue{
                print(newKeyboardFrame.height)
            }
        }
    }
    view.layoutIfNeeded()

Ответ 4

func keyboardWillShow(_ notification: Foundation.Notification) {

    if let keyboardSize = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? CGRect {

        print(keyboardSize)

    }

}