2012-07-01 22 views
75

La altura en el retrato y la altura en el paisaje medidos en puntos.¿Cuál es la altura del teclado en pantalla del iPhone?

+2

Aquí puede encontrar todas las dimensiones de un iPhone: [iPhone dimensions] (http://www.titaniumtips.com/files/tag-dimensions.php) – Pfitz

+3

¡No utilice el último enlace de "dimensiones de iPhone"! Es a partir de 2011, antes de que apareciera iOS 8, y permitió que la altura del teclado en pantalla varíe. –

+0

@MikeGledhill la altura del teclado en pantalla varía incluso antes de iOS 8. – ReDetection

Respuesta

44

La altura del teclado es 216pts para el modo vertical y 162pts para el modo horizontal.

Source

+119

Si va a publicar preguntas auto-respondidas, al menos dé respuestas decentes. El tamaño del teclado debe obtenerse del objeto de notificación, no un valor codificado de algún sitio web. Ver [aquí] (http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html#//apple_ref/doc/constant_group/Keyboard_Notification_User_Info_Keys) – jrturton

+2

@jrturton Eche un vistazo a : http://stackoverflow.com/questions/4213878/what-is-the-height-of-ipads-onscreen-keyboard. Solo publiqué esta pregunta, porque alguien me dio una respuesta con la altura para iPhone y pensé que también debería haber una pregunta para iPhone. –

+13

@jrturton La pregunta no es cómo encontrar la altura mediante programación. Esta pregunta no solo es útil para programadores, sino también para diseñadores gráficos y demás. La respuesta que está solicitando pertenece a otra pregunta. De hecho, hay otra pregunta con esa respuesta: stackoverflow.com/a/7302291/310121 –

191

I utilizó el siguiente enfoque para la determinación del marco del teclado en iOS 7.1.

En el método init de mi controlador de vista, I registrado para el UIKeyboardDidShowNotification:

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

Entonces, he utilizado el código siguiente 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)); 
} 

Swift

Y la aplicación equivalente con Swift ... suscribirse 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)") 
} 
+4

Si bien parece un poco complicado, esto es mucho mejor que codificar el tamaño del teclado. Respuesta correcta. – n13

+2

Votaron esta respuesta y rechazaron la pregunta. OP definitivamente no sabe de lo que está hablando. ¡Ten cuidado muchachos! Esta respuesta es la correcta! –

+2

Debe ser la respuesta correcta – tiguero

39

Recuerde 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 puede también deslizar el área de texto de predicción de encendido y apagado ... y cuando lo hacen, sería poner en marcha keyboardWillShow caso de una aplicación de nuevo .

Este se romper un montón de ejemplos de código legado, que recomendó que escriben un evento keyboardWillShow, que sólo mide la altura actual del teclado en pantalla y cambiar su control hacia arriba o hacia abajo en la página de esta cantidad (absoluta) .

enter image description here

En otras palabras, si usted ve cualquier código de ejemplo, que sólo le dice que usted agregue un evento keyboardWillShow, mida la altura del teclado, a continuación, cambiar el tamaño de las alturas de sus diversos controles en esta cantidad, esto ya no quieren ninguna siempre trabajo.

En mi ejemplo anterior, utilicé el código de muestra del siguiente sitio, que anima el valor de las restricciones verticales constant.

Practicing AutoLayout

En mi aplicación, he añadido una restricción a mi UITextView, se establece en la parte inferior de la pantalla. Cuando apareció la pantalla por primera vez, guardé esta distancia vertical inicial.

Entonces, cada vez que mi caso keyboardWillShow se inició, me añadir el (nuevo) a la altura del teclado este valor restricción original (por lo que la limitación cambia el tamaño de la altura del control).

enter image description here

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 la parte superior del teclado en pantalla.

Quizás me esté perdiendo algo.

Aparte de mi cordura.

+0

en realidad, el tamaño del teclado siempre varía, incluso en las versiones anteriores de iOS. p.ej. verificar la escritura en idioma chino – ReDetection

+0

Ooops, no me di cuenta de eso. Me pareció extraño que tantas muestras de "keyboardWillShow" siempre supusieran que este evento se llamaría * una vez * cuando el teclado aparecía o desaparecía ... sin ninguna funcionalidad para hacer frente al teclado que permanece en pantalla, pero cambiando su tamaño. –

+1

@MikeGledhill Creo que deberás usar "UIKeyboardWillChangeFrameNotification" para el cambio de fotograma debido a la rotación o mostrar (/ ocultar) la barra de predicción de texto ... –

14

versión nota: esto ya no tiene valor en iOS 9 & 10, ya que admiten tamaños de teclado personalizados.

esto depende del modelo y la barra QuickType:

enter image description here

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

+1

** nota de versión **: esto ya no tiene valor en iOS 9 y 10, ya que admiten tamaños de teclado personalizados. – Raptor

+0

@Raptor gracias! Agregué esta sugerencia a mi respuesta. –

8

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 
      } 
    } 
+0

¡Solución perfecta, gracias! –

0

no puedo encontrar la última respuesta, así que comprobarlo 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 5ta 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!

Cuestiones relacionadas