Je cherche deux chiffres ici: la hauteur en portrait et la hauteur en paysage. Ne répondez pas en cm ou en pouces, mais plutôt en pixels.
La hauteur du portrait est de 264 tandis que la hauteur du paysage est de 352.
Je sais que c'est une réponse tardive, mais je suis juste tombé sur cette question moi-même.
- (void) keyboardWasShown:(NSNotification *)nsNotification {
NSDictionary *userInfo = [nsNotification userInfo];
CGSize kbSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"Height: %f Width: %f", kbSize.height, kbSize.width);
// Portrait: Height: 264.000000 Width: 768.000000
// Landscape: Height: 352.000000 Width: 1024.000000
}
La réponse est: cela dépend .
Je suis conscient de 16 hauteurs différentes que le clavier peut être, et il peut être dans n’importe quelle position.
C'est différent pour:
J'ai joint une image montrant différentes configurations possibles.
Plutôt que d'énumérer les 16 possibilités, je pense que vous souhaitez observer UIKeyboardWillShowNotification
/UIKeyboardWillHideNotification
et UIKeyboardDidChangeFrameNotification
(iOS 5.0+), puis obtenir le cadre du clavier à partir de ces événements.
Sur l'iPad, la taille du clavier peut également dépendre de la langue (par exemple, le clavier japonais est plus grand). Une autre raison de l'interroger par programme.
Vous pouvez obtenir la hauteur du clavier à partir du dictionnaire userInfo renvoyé par la notification de clavier indiquant/masquer, telle que fournie par la classe UIWindow ( lien du guide de référence ). C'est un moyen bien meilleur d'obtenir de la hauteur que de coder en dur, car vous bénéficiez des avantages suivants:
En fait, les réponses à cette question qui donnent un nombre exact ont probablement obtenu ce nombre en consultant les résultats renvoyés dans ce dictionnaire!
J'ai voté bas quelques réponses sur cette page, car elles sont dangereusement trompeuses.
Certes, avec iOS 8, vous ne pouvez pas utiliser une hauteur de clavier codée en dur.
Voici mon application, fonctionnant sur un iPhone, pour expliquer pourquoi.
Prenez votre règle et dites-moi, quelle est la hauteur du clavier à l'écran ..?
Ahh ... tu ne peux pas le faire, n'est-ce pas?
La hauteur peut varier si l'utilisateur active la barre de saisie automatique située en haut du clavier à l'écran (ce qui déclenche en passant un second événement "keyboardWillShow
").
Il en va de même pour le clavier à l'écran de l'iPad.
En conclusion, désolé, vous devez mesurer la hauteur du clavier dans un événement keyboardWillShow
.
Sinon, vous rencontrerez des problèmes.
- (void)keyboardWillShow:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
NSValue *kbFrame = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardFrame = [kbFrame CGRectValue];
keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil];
CGFloat heightOfKeyboard = keyboardFrame.size.height;
NSLog(@"The keyboard is now %d pixels high.", (int)heightOfKeyboard);
}
Au fait, n'oubliez pas cet appel à convertRect
dans le code ci-dessus.
Sans cela, je trouvais que, sur un iPad fonctionnant en mode paysage avec iOS 8, le clavier aurait parfois une hauteur de 1024 pixels.
Encore une chose...
Aujourd'hui, je travaillais sur un contrôle personnalisé que j'avais écrit, qui apparaît en bas de l'écran de l'iPhone/iPad, et qui m'a permis de réaliser que je n'avais pas pris en compte la hauteur du clavier à l'écran.
Je ne voulais pas ajouter de notifications keyboardWillShow/Hide, car ce petit contrôle était générique et pouvait être appelé à partir de n’importe quel de mes écrans.
Ma solution pour trouver la hauteur du clavier à l'écran, s'il était actuellement visible, consistait à utiliser l'excellente fonction visibleKeyboardHeight du contrôle free SVProgressHUD
.
Ce contrôle aussi _ avait besoin de la hauteur du clavier à l'écran pour que son message de notification UIView
s apparaisse centré verticalement.
Cela a fonctionné à merveille ... donc si vous do _ besoin d'une méthode quick'n'dirty pour saisir la hauteur du clavier, récupérer une copie de ce code et regarder dans le fichier SVProgressHUD.m .
Vous pouvez le savoir par programme (via le simulateur si vous n'avez pas d'appareil).
Dans iOS 7, pour iPad, 402 pour Paysage et 314 pour Portrait.
Je ne sais pas ce que c'est, mais vous pourriez le comprendre assez facilement.
Surfer sur votre iPad pour une page avec cette ...
var totalHeight = window.innerHeight;
document.getElementById('what-is-my-height').onclick = function() {
alert(totalHeight - window.innerHeight);
};
<button id="what-is-my-height">Bring up keyboard, then Push me</button>
Cliquez sur le bouton (après avoir affiché le clavier à l'écran) pour vous indiquer la hauteur Répétez l'opération pour l'autre orientation.
Les tailles sont: PORTRAIT = 264 PAYSAGE = 352
Il y avait un problème dans iOS 7 où la hauteur et la largeur ne permutaient pas en mode paysage, mais le problème était résolu dans iOS 8.
Voici donc le morceau de code qui renverrait toujours la hauteur pour iOS7 ou iOS8, éliminant ainsi la vérification spécifique à la version dans votre code.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
//Always gives the height as the height is of smaller dimension
CGFloat height = (kbSize.height>kbSize.width)?kbSize.width:kbSize.height;
}
Je pense qu'il y a plus de problèmes que ceux résolus dans d'autres réponses. Par exemple, vous pouvez vous retrouver avec ce clavier:
Cela se produit lorsque vous cliquez sur le bouton "masquer" du clavier iPad sous iOS 9. Ce clavier a toujours une taille full
dans les informations de notification provenant de Mike Gledhill
réponse. (dans UIKeyboardFrameEndUserInfoKey
la hauteur du clavier est supérieure à 300).
Je devais soustraire l’origine de l’axe Y du clavier à la hauteur de l’appareil pour corriger la valeur.
- (void)keyboardWillShow:(NSNotification *)notification
NSDictionary *info = [aNotification userInfo];
CGRect keyboardFrame = [info[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
keyboardFrame = [info[UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil];
CGFloat yPosition = keyboardFrame.Origin.y;
NSInteger height = [UIScreen mainScreen].bounds.size.height - yPosition;
}
Fonctionne pour moi sur iOS9 avec iPhone et iPad dans les deux sens.