tamaño - ¿Cuál es la altura del teclado en pantalla del iPhone?
teclado iphone 7 (6)
La altura del teclado depende del modelo, la barra QuickType, la configuración del usuario ... El mejor enfoque es calcular dinámicamente:
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 altura en el retrato y la altura en el paisaje medidos en puntos.
La altura del teclado es 216pts para el modo vertical y 162pts para el modo horizontal.
No puedo encontrar la última respuesta, así que lo compruebo todo con el simulador. (IOS 11.0)
Dispositivo | Altura de la pantalla | Retrato | Paisaje
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 5ª generación, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265.0 | 353.0
¡Gracias!
Recuerda que, con iOS 8, el tamaño del teclado en pantalla puede variar. No asuma que el teclado en pantalla siempre estará visible (con una altura específica ) o invisible.
Ahora, con iOS 8, el usuario también puede deslizar y soltar el área de predicción de texto ... y cuando lo haga, se iniciará de nuevo el evento keyboardWillShow
la aplicación.
Esto romperá una gran cantidad de muestras de código heredado, que recomendaba escribir un evento keyboardWillShow
, que simplemente mide la altura actual del teclado en pantalla y desplazando los controles hacia arriba o hacia abajo en la página en esta cantidad (absoluta).
En otras palabras, si ve algún código de muestra, que simplemente le indica que agregue un evento keyboardWillShow
, mida la altura del teclado y luego cambie el tamaño de las alturas de estos controles, esto ya no funcionará.
En mi ejemplo anterior, utilicé el código de muestra del siguiente sitio, que anima el valor constant
restricciones verticales.
En mi aplicación, agregué una restricción a mi UITextView
, establecido en la parte inferior de la pantalla. Cuando apareció la pantalla por primera vez, guardé esta distancia vertical inicial.
Luego, cada vez que se inicia el evento keyboardWillShow
, agrego la (nueva) altura del teclado a este valor de restricción original (por lo que la restricción cambia el tamaño del alto del control).
Sí. Es feo
Y estoy un poco molesto / sorprendido de que el AutoLayout horriblemente doloroso de XCode 6 no solo nos permita unir la parte inferior de los controles a la parte inferior de la pantalla o a la parte superior del teclado en pantalla.
Quizás me estoy perdiendo algo.
Aparte de mi cordura.
Usé el siguiente enfoque para determinar el marco del teclado en iOS 7.1.
En el método init de mi controlador de vista, me UIKeyboardDidShowNotification
para el UIKeyboardDidShowNotification
:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
Luego, utilicé el siguiente código en keyboardOnScreen:
para obtener acceso al marco del teclado. Este código obtiene el diccionario userInfo
de la notificación y luego accede al NSValue
asociado con UIKeyboardFrameEndUserInfoKey
. A continuación, puede acceder al CGRect y convertirlo a las coordenadas de la vista de su controlador de vista. A partir de ahí, puede realizar cualquier cálculo que necesite en función de ese marco.
-(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));
}
Rápido
Y la implementación equivalente con Swift ... suscríbase a la notificación:
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "keyboardShown:", name: UIKeyboardDidShowNotification, object: nil)
Y el método que calcula el tamaño del teclado:
func keyboardShown(notification: NSNotification) {
let info = notification.userInfo!
let value: AnyObject = info[UIKeyboardFrameEndUserInfoKey]!
let rawFrame = value.CGRectValue()
let keyboardFrame = view.convertRect(rawFrame, fromView: nil)
println("keyboardFrame: /(keyboardFrame)")
}
Swift 2.0
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "keyboardShown:", name: UIKeyboardDidShowNotification, object: nil)
Y el método que calcula el tamaño del teclado:
func keyboardShown(notification: NSNotification) {
let info = notification.userInfo!
let value: AnyObject = info[UIKeyboardFrameEndUserInfoKey]!
let rawFrame = value.CGRectValue
let keyboardFrame = view.convertRect(rawFrame, fromView: nil)
print("keyboardFrame: /(keyboardFrame)")
}
SWIFT 3.0
Observador
NotificationCenter.default.addObserver(self, selector: #selector(keyboardShown), name:NSNotification.Name.UIKeyboardWillShow, object: nil);
Método
func keyboardShown(notification: NSNotification) {
let info = notification.userInfo!
let keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
print("keyboardFrame: /(keyboardFrame)")
}
Nota de la versión: esto ya no tiene valor en iOS 9 y 10, ya que admiten tamaños de teclado personalizados.
Esto depende del modelo y la barra QuickType: