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


84

La hauteur en portrait et la hauteur en paysage mesurées en points.


2
Ici vous pouvez trouver toutes les dimensions d'un iPhone: Dimensions de l'iPhone
Pfitz

3
N'utilisez pas ce dernier lien "Dimensions iPhone"! C'est à partir de 2011, avant l'arrivée d'iOS 8, et permet à la hauteur du clavier à l'écran de varier.
Mike Gledhill le

La hauteur du clavier à l'écran @MikeGledhill varie avant même iOS 8.
ReDetection

Connexes: Si vous recherchez les valeurs réelles des hauteurs de clavier (par exemple à des fins de débogage), consultez Hauteurs de clavier en langue étrangère iOS?
Senseful

Réponses:


211

J'ai utilisé l'approche suivante pour déterminer le cadre du clavier sous iOS 7.1.

Dans la méthode init de mon contrôleur de vue, je me suis inscrit au UIKeyboardDidShowNotification:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];

Ensuite, j'ai utilisé le code suivant keyboardOnScreen:pour accéder au cadre du clavier. Ce code récupère le userInfodictionnaire à partir de la notification, puis accède au fichier NSValueassocié UIKeyboardFrameEndUserInfoKey. Vous pouvez ensuite accéder au CGRect et le convertir en coordonnées de la vue de votre contrôleur de vue. À partir de là, vous pouvez effectuer tous les calculs dont vous avez besoin en fonction de cette image.

-(void)keyboardOnScreen:(NSNotification *)notification 
 {
        NSDictionary *info  = notification.userInfo;
        NSValue      *value = info[UIKeyboardFrameEndUserInfoKey];

        CGRect rawFrame      = [value CGRectValue];
        CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];

        NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame));
 }

Rapide

Et l'implémentation équivalente avec Swift:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)


@objc
func keyboardDidShow(notification: Notification) {
    guard let info = notification.userInfo else { return }
    guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
    let keyboardFrame = frameInfo.cgRectValue
    print("keyboardFrame: \(keyboardFrame)")
}

4
Bien que cela semble un peu impliqué, c'est certainement mieux que de coder en dur la taille du clavier. Bonne réponse.
n13

2
A voté cette réponse et voté contre la question. OP ne sait certainement pas de quoi il parle. Soyez prudent les gars! Cette réponse est la bonne!
superarts.org

2
un complément pour Landscape: if (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; }
LiangWang

3
Existe-t-il un moyen de faire cela sans que le clavier n'apparaisse? Dans mon cas, je veux avoir quelque chose derrière le clavier avec la même hauteur (semblable à la façon dont les messagers ont des choses)
Jean

@ superarts.org Il n'est pas nécessaire de voter contre la question; les gens chercheront probablement ceci, et ils verront maintenant cette réponse .. donc tout va bien :)
Ja͢ck

46

N'oubliez pas qu'avec iOS 8, la taille du clavier à l'écran peut varier. Ne supposez pas que le clavier à l'écran sera toujours visible (avec une hauteur spécifique ) ou invisible.

Désormais, avec iOS 8, l'utilisateur peut également activer et désactiver la zone de prédiction de texte ... et quand ils le font, cela déclenche à nouveau l'keyboardWillShow événement d' une application .

Cela va briser beaucoup d'exemples de code existants, qui a recommandé la rédaction d' un keyboardWillShowévénement, qui mesure simplement la hauteur actuelle du clavier à l' écran, et vos commandes de déplacement vers le haut ou vers le bas sur la page de ce montant (absolue).

entrez la description de l'image ici

En d'autres termes, si vous voyez un exemple de code, qui vous dit simplement d'ajouter un keyboardWillShowévénement, de mesurer la hauteur du clavier, puis de redimensionner les hauteurs de vos contrôles de ce montant, cela ne fonctionnera plus toujours.

Dans mon exemple ci-dessus, j'ai utilisé l'exemple de code du site suivant, qui anime la constantvaleur des contraintes verticales .

Pratiquer la mise en page automatique

Dans mon application, j'ai ajouté une contrainte à mon UITextView, définie en bas de l'écran. Lorsque l'écran est apparu pour la première fois, j'ai stocké cette distance verticale initiale.

Ensuite, chaque fois que mon keyboardWillShowévénement est lancé, j'ajoute la (nouvelle) hauteur du clavier à cette valeur de contrainte d'origine (donc la contrainte redimensionne la hauteur du contrôle).

entrez la description de l'image ici

Ouais. C'est moche.

Et je suis un peu ennuyé / surpris que l'AutoLayout horriblement douloureux de XCode 6 ne nous permette pas seulement d'attacher le bas des commandes au bas de l'écran ou au haut du clavier à l'écran.

Il me manque peut-être quelque chose.

Autre que ma raison.


en fait, la taille du clavier varie toujours, même sur les anciennes versions d'iOS. par exemple, vérifier l'écriture manuscrite de la langue chinoise
ReDetection

Oups, je ne m'en suis pas rendu compte. J'ai juste trouvé étrange que tant d'échantillons de "keyboardWillShow" aient toujours supposé que cet événement ne serait appelé qu'une seule fois lorsque le clavier apparaissait ou disparaissait ... sans fonctionnalité pour faire face au clavier restant à l'écran, mais en changeant sa taille.
Mike Gledhill

1
@MikeGledhill Je pense que vous utiliserez "UIKeyboardWillChangeFrameNotification" pour le changement de cadre dû à la rotation ou pour afficher (/ masquer) la barre de prédiction de texte ...
Abdalrahman Shatou

Je viens de tester cela avec mon application. UIKeyboardWillChangeFrameNotification est toujours appelé AUSSI QUE l'événement keyboardWillShow, chaque fois que je fais apparaître le clavier ou que j'active ou désactive la zone de prédiction de texte. Donc ça n'aide pas vraiment beaucoup. Mon point est ... les utilisateurs doivent être un peu prudents avec ces événements, c'est tout.
Mike Gledhill

1
Pourquoi cela n'a-t-il pas beaucoup plus d'attention?
rfoo

30

La hauteur du clavier est de 216 points pour le mode portrait et de 162 points pour le mode paysage.

La source


135
Si vous souhaitez publier des questions auto-répondues, donnez au moins des réponses décentes. La taille du clavier doit être obtenue à partir de l'objet de notification et non d'une valeur codée en dur provenant d'un site Web. Voir ici
jrturton

16
@jrturton La question n'est pas de savoir comment trouver la hauteur par programme. Cette question n'est pas seulement utile aux programmeurs, mais aussi aux graphistes et autres. La réponse que vous demandez appartient à une autre question. En fait, il y a une autre question avec cette réponse: stackoverflow.com/a/7302291/310121
Erik B

48
@ErikB Soyez prudent. La taille du clavier dépend de la langue et du type de clavier.
Gabriel

13
Pour votre propre bien, n'utilisez JAMAIS la valeur codée en dur! À titre d'exemple fort, un utilisateur peut utiliser le clavier divisé (en deux parties), qui ne se soucie pas beaucoup de la hauteur.
Timo du

6
Cette réponse est paresseuse et dangereuse. Veuillez obtenir la hauteur du clavier à partir de UIKeyboardDidShowNotification, car la valeur réelle a tendance à changer entre les versions majeures d'iOS. Voir la réponse de Ken ci-dessous.
Alexander


10

La hauteur du clavier dépend du modèle, de la barre QuickType, des paramètres utilisateur ... La meilleure approche est de calculer dinamiquement:

Swift 3.0

    var heightKeyboard : CGFloat?

    override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
    }

    func keyboardShown(notification: NSNotification) {
           if let infoKey  = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
               let rawFrame = (infoKey as AnyObject).cgRectValue {
               let keyboardFrame = view.convert(rawFrame, from: nil)
               self.heightKeyboard = keyboardFrame.size.height
               // Now is stored in your heightKeyboard variable
           }
    }

8

Je ne trouve pas la dernière réponse, donc je vérifie tout avec le simulateur. (IOS 11.0)


Appareil | Hauteur de l'écran | Portrait | Paysage

iPhone 4s | 480,0 | 216,0 | 162,0

iPhone 5, iPhone 5s, iPhone SE | 568,0 | 216,0 | 162,0

iPhone 6, iPhone 6s, iPhone 7, iPhone 8, iPhone X | 667,0 | 216,0 | 162,0

iPhone 6 plus, iPhone 7 plus, iPhone 8 plus | 736,0 | 226,0 | 162,0

iPad 5e génération, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024,0 | 265,0 | 353,0


Merci!


0

iPhone

ClavierTailles:

  1. 5S, SE, 5, 5C (320 × 568) keyboardSize = (0.0, 352.0, 320.0, 216.0) keyboardSize = (0.0, 315.0, 320.0, 253.0)

2.6S, 6,7,8: (375 × 667): keyboardSize = (0.0, 407.0, 375.0, 260.

3,6 +, 6S +, 7+, 8+: (414 × 736) keyboardSize = (0.0, 465.0, 414.0, 271.0)

4.XS, X: (375 X 812) keyboardSize = (0.0, 477.0, 375.0, 335.0)

5.XR, XSMAX ((414 x 896) taille du clavier = (0,0, 550,0, 414,0, 346,0)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.