Получить высоту клавиатуры не работает на бета-версии 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)
}
}