web-dev-qa-db-fra.com

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

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

82
Erik B

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

Source

34
Erik B

J'ai utilisé l'approche suivante pour déterminer la trame du clavier dans iOS 7.1.

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

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

Ensuite, j'ai utilisé le code suivant dans keyboardOnScreen: pour accéder au cadre du clavier. Ce code extrait le dictionnaire userInfo de la notification, puis accède au NSValue associé à 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 nécessaires en fonction de ce cadre.

-(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)")
}
210
Ken Anderson

Rappelez-vous que, 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 faire glisser le curseur sur la zone de prédiction de texte ... et, ce faisant, il déclenche le keyboardWillShow événement d'une application encore =.

This will rompre beaucoup d'échantillons de code hérités, qui recommandaient d'écrire un événement keyboardWillShow, qui mesurait simplement la hauteur actuelle du clavier à l'écran, et de déplacer vos contrôles vers le haut ou le bas. la page par ce montant (absolu).

enter image description here

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

Dans l'exemple ci-dessus, j'ai utilisé l'exemple de code du site suivant, qui anime les contraintes verticales constant valeur.

Pratiquer AutoLayout

Dans mon application, j'ai ajouté une contrainte à mon UITextView, défini au bas de l'écran. Lorsque l'écran est apparu, j'ai enregistré cette distance verticale initiale.

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

enter image description here

Ouais. C'est moche.

Et je suis un peu ennuyé/surpris que la mise en page automatique horriblement douloureuse de XCode 6 ne nous permette pas d'associer le bas des contrôles au bas de l'écran ou en haut du clavier à l'écran.

Peut-être que je manque quelque chose.

Autre que ma santé mentale.

46
Mike Gledhill

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

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

enter image description here

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

16
Philipp Sander

La hauteur du clavier dépend du modèle, de la barre QuickType, des paramètres de l'utilisateur ... La meilleure approche consiste à calculer de manière dynamique:

Swift 3.

    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
           }
    }
10
torcelly

Je ne trouve pas la dernière réponse, je vérifie donc 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 de 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!

6
Seungyoun Yi

iPhone

Taille du clavier:

  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) keyboardSize = (0.0, 550.0, 414.0, 346.0)

0
Tejaswini