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?
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)
}
}
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)
}
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()