web-dev-qa-db-fra.com

Obtenir la hauteur du clavier ne fonctionne pas IOS 11 beta

J'ai le code suivant qui a fonctionné sur IOS 10, mais il ne fonctionne plus maintenant lorsqu'il est exécuté sur IOS 11 bêta.

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

C'est ce que je reçois quand j'imprime la taille:

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

Quelqu'un sait pourquoi cela a cessé de fonctionner? Ou si j'ai d'autres alternatives pour obtenir la taille du clavier?

16
Kobe

Utilisez UIKeyboardFrameEndUserInfoKey au lieu de UIKeyboardFrameBeginUserInfoKey

Donc, changer votre code en suivant résoudra votre problème:

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

J'ai le même problème. .__ La réponse de Doug Amos est juste. Je veux juste que ce soit plus clair. Voici mon 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

J'ai utilisé ce code dans mon application avec Swift 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()
0
Dasoga