Ich habe den folgenden Code, der an IOS 10 gearbeitet hat, aber jetzt funktioniert er nicht mehr, wenn er auf IOS 11 Beta läuft.
if let userInfo = notification.userInfo {
if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
print(keyboardSize)
}
}
Das bekomme ich, wenn ich die Größe drucke:
(0.0, 0.0, 0.0, 0.0)
(0.0, 736.0, 414.0, 0.0)
Weiß jemand, warum das aufgehört hat zu arbeiten? Oder wenn ich andere Alternativen habe, um die Tastaturgröße zu ermitteln?
Verwenden Sie UIKeyboardFrameEndUserInfoKey
anstelle von UIKeyboardFrameBeginUserInfoKey
Wenn Sie den Code folgendermaßen ändern, wird Ihr Problem behoben:
if let userInfo = notification.userInfo {
if let keyboardSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
print(keyboardSize)
}
}
Ich habe das gleiche Problem. Die Antwort von Doug Amos ist richtig. Ich möchte es nur klarer machen. Hier ist mein Code:
@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)
}
Ich habe diesen Code in meiner App mit Swift 3+ verwendet.
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()