85 votes

iOS 11 - Keyboard Height renvoie 0 dans la notification de clavier

J'utilise les notifications de clavier sans aucun problème et j'obtiens une hauteur exacte du clavier.

 - (void)keyboardDidShow:(NSNotification *) notification{
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    NSLog(@"%f",keyboardSize.height);}
 

mais avec iOS 11, la taille du clavier est 0 lorsque la notification est appelée.

Quel est le problème survenant dans ce scénario? J'utilise xcode 9 Beta 5

191voto

s.zainulabideen Points 1910

Utilisez ceci:

 CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
 

Pour Swift, vous pouvez utiliser:

 let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size
 

102voto

Aditya Srivastava Points 2433

Remplacer UIKeyboardFrameBeginUserInfoKey

avec

UIKeyboardFrameEndUserInfoKey

Le texte ci-dessous provient de Apple Docs.

UIKeyboardFrameBeginUserInfoKey - Clé d'un objet NSValue contenant un CGRect qui identifie la trame de début du clavier en coordonnées d'écran.

UIKeyboardFrameEndUserInfoKey - Clé d'un objet NSValue contenant un CGRect qui identifie le cadre de fin du clavier en coordonnées d'écran.

7voto

SolinLiu Points 194

Essaye ça:

Remplacer UIKeyboardFrameBeginUserInfoKey avec UIKeyboardFrameEndUserInfoKey

5voto

andym Points 57

J'ai eu un problème similaire avec Xcode Version 9.0 (9A235); bien que j'utilisais Swift. Dans ma méthode keyboardWillShow, j'ai écrit ce qui suit:

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

    let heightValue = keyboardSize.height    

    ...
}
 

Étrangement, la première fois que keyboardWillShow a été appelé, heightValue était de 216,0, mais lors d'appels suivants, il était devenu 0! C'est peut-être un bug de Xcode.

J'ai remplacé le UIKeyboardFrameBeginUserInfoKey par un UIKeyboardFrameEndUserInfoKey, et le problème a été résolu pour moi.

4voto

Hitesh Surani Points 2175

Calculez la hauteur du clavier en utilisant le code ci-dessous. Il fonctionne pour les deux périphériques avec les périphériques safe area et non-safe area .

 @objc func keyboardWillShow(notification: Notification) {
    guard let keyboardFrame = notification.userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
            return
        }    
    let keyboardHeight: CGFloat                    
    if #available(iOS 11.0, *) {
       let window = UIApplication.shared.keyWindow
       let bottomPadding = window?.safeAreaInsets.bottom ?? 0.0
       keyboardHeight = keyboardFrame.cgRectValue.height - bottomPadding
    } else {
       keyboardHeight = keyboardFrame.cgRectValue.height
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X