web-dev-qa-db-de.com

Holen Sie sich die Höhe der Tastatur funktioniert nicht IOS 11 Beta

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?

16
Kobe

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)
    }
}
15
Doug Amos

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)
    }
3
Chi Minh Trinh

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()
0
Dasoga