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.

Erik B
la source
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)")
}
Ken Anderson
la source
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.

Mike Gledhill
la source
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

Erik B
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
16

note de version: ce n'est plus la valeur dans iOS 9 et 10, car ils prennent en charge les tailles de clavier personnalisées.

Cela dépend du modèle et de la barre QuickType:

entrez la description de l'image ici

http://www.idev101.com/code/User_Interface/sizes.html

Philipp Sander
la source
1
note de version : ce n'est plus la valeur dans iOS 9 et 10, car ils prennent en charge les tailles de clavier personnalisées.
Raptor
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
           }
    }
torcelly
la source
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!

Seungyoun Yi
la source
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)

Jr.iOS_dev_T27
la source