web-dev-qa-db-fra.com

Quelle est la hauteur du clavier à l'écran iPad?

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.

50
Erik B

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.

118
thelaws
- (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
}
55
user629328

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:

  1. paysage/portrait, 
  2. webview/non webview, 
  3. style de sélection des caractères asiatiques, langue courante
  4. clavier partagé/non partagé

J'ai joint une image montrant différentes configurations possibles. 

sample ipad keyboard configurations

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.

28
jcampbell1

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.

17
Kris Van Bael

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:

  • Indépendance de l'appareil (iPhone/iPod ou iPad)
  • Indépendance de résolution (écran iPhone 3G/écran Retina/iPad/futurs affichages).
  • Indépendance de type/style de clavier (différents claviers à l'écran peuvent avoir des tailles différentes).

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!

6
James Bedford

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 ..?

enter image description here

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 UIViews 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 .

Téléchargez SVProgressHUD de GitHub

4
Mike Gledhill
3
Dominic

Dans iOS 7, pour iPad, 402 pour Paysage et 314 pour Portrait.

2
Max

Je ne sais pas ce que c'est, mais vous pourriez le comprendre assez facilement.

Surfer sur votre iPad pour une page avec cette ...

JavaScript

var totalHeight = window.innerHeight;
document.getElementById('what-is-my-height').onclick = function() {
  alert(totalHeight - window.innerHeight); 
};

HTML

<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.

2
alex

Les tailles sont: PORTRAIT = 264 PAYSAGE = 352

1
bornbnid

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;
}
1
Swaroop S

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:

 enter image description here

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.

0
kraag22