J'utilise le code ci-dessous pour obtenir la hauteur du clavier. Ensuite, j'utilise cette hauteur pour calculer le cadre d'un clavier. UIView
pour s'assurer que cette UIView
juste sur le dessus du clavier.
Mais dans le simulateur iPhoneX, la sortie est 333
et le simulateur d'iPhone 8 est 258
.
ENJEU : Si vous utilisez rect.height
comme la hauteur du clavier pour le simulateur iPhone 8 alors la disposition est correcte. Pour l'iPhone X, il y a un écart entre le UIView
et le clavier. Ce qui signifie 333
est plus élevée que la hauteur réelle du clavier de l'iPhone X.
Quelle est la raison pour laquelle la hauteur est différente ? Et comment obtenir la bonne hauteur de clavier ?
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
@objc func keyboardWillShow(_ notification: NSNotification) {
if let rect = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
print(rect.height)
}
}
Comme dans cette image, la bordure verte devrait être la partie supplémentaire. En fait, j'ai besoin de la partie rouge juste en haut du clavier sans l'espace vert.
EDIT
OK, avec l'aide de @Craig j'ai trouvé que cette méthode n'est appelée que par l'iPhone X. Donc je mets à jour le cadre ici. Il suffit de coller le code ici.
La hauteur du fond de la zone de sécurité est de 22.0, ce qui ne semble pas correct.
override func viewSafeAreaInsetsDidChange() {
if #available(iOS 11.0, *) {
super.viewSafeAreaInsetsDidChange()
view.safeAreaInsets.bottom // This value is the bottom safe area place value.
}
}
EDIT2 Normalement view.safeAreaInsets.bottom
devrait être de 34.0, mais si vous utilisez la vue des conteneurs cette valeur peut être différente comme la mienne est de 22.0.
0 votes
Quel est votre problème en fait ? vous demandez une spéculation basée sur une opinion dans votre question.
0 votes
Vous pouvez toujours utiliser
rect.height
pour calculer ce qui reste ?0 votes
@holex J'ai modifié ma question. Ma question est que je n'arrive pas à obtenir une hauteur de clavier correcte en
rect.height
de la notification.0 votes
@zcui93
rect.height
devrait être la hauteur du clavier normalement.2 votes
@zcui93 Vous avez raison, je pense que pour l'iPhone X la hauteur du rectangle n'est plus la hauteur du clavier. Il faudrait ajouter la partie inférieure.
0 votes
J'utilisais
UIKeyboardFrameBeginUserInfoKey
au lieu deUIKeyboardFrameEndUserInfoKey
. Cela m'a donné des valeurs de hauteur différentes sur des touches consécutives du clavier. Mais la première touche fonctionnait très bien sur le non-iPhone-X.... étrange