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.
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.
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).
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 .
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).
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.
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.
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.
Réponses:
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 leuserInfo
dictionnaire à partir de la notification, puis accède au fichierNSValue
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 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)") }
la source
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).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
constant
valeur 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).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.
la source
La hauteur du clavier est de 216 points pour le mode portrait et de 162 points pour le mode paysage.
La source
la source
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:
http://www.idev101.com/code/User_Interface/sizes.html
la source
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 } }
la source
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!
la source
iPhone
ClavierTailles:
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)
la source