tipo teclado tamaño para letra descargar como color cambiar aumentar aplicacion acomodar ios objective-c nsnotificationcenter

ios - tamaño - teclado iphone 7



iOS 11: la altura del teclado devuelve 0 en la notificación del teclado (7)

He estado usando notificaciones de teclado sin ningún problema y obteniendo la altura exacta del teclado.

- (void)keyboardDidShow:(NSNotification *) notification{ CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; NSLog(@"%f",keyboardSize.height);}

pero con iOS 11 el tamaño del teclado es 0 cuando se llama a la notificación.

¿Cuál es el problema que ocurre en este escenario? Estoy usando xcode 9 Beta 5


Calcule la altura del teclado usando el siguiente código. Funciona tanto para dispositivos con safe area como para dispositivos de safe area non-safe area .

@objc func keyboardWillShow(notification: Notification) { guard let keyboardFrame = notification.userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return } let keyboardHeight: CGFloat if #available(iOS 11.0, *) { let window = UIApplication.shared.keyWindow let bottomPadding = window?.safeAreaInsets.bottom ?? 0.0 keyboardHeight = keyboardFrame.cgRectValue.height - bottomPadding } else { keyboardHeight = keyboardFrame.cgRectValue.height } }


Este problema está ocurriendo en iOS 11.

Reemplazar

"UIKeyboardFrameBeginUserInfoKey" con "UIKeyboardFrameEndUserInfoKey"

como se muestra a continuación solucionaría el problema

Código Objective-C:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

Swift 2.3:

let keyboardSize = (NfnPsgVar.userInfo![UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue().size

Swift 3:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size


Prueba esto:

Reemplace UIKeyboardFrameBeginUserInfoKey con UIKeyboardFrameEndUserInfoKey


Reemplazar UIKeyboardFrameBeginUserInfoKey

con

UIKeyboardFrameEndUserInfoKey

El siguiente es de Apple Docs.

UIKeyboardFrameBeginUserInfoKey: la clave para un objeto NSValue que contiene un CGRect que identifica el marco de inicio del teclado en las coordenadas de la pantalla.

UIKeyboardFrameEndUserInfoKey: la clave para un objeto NSValue que contiene un CGRect que identifica el marco final del teclado en las coordenadas de la pantalla.


Su enfoque está tratando de obtener la altura del marco antes de que se muestre, y es por eso que debería ser 0, ¡no estoy seguro de por qué no es en el primer intento! Aquí hay un ejemplo de cómo obtener correctamente la altura del teclado en Swift 4.2:

func keyboardWillShow(notification: Notification) { guard let userInfo = notification.userInfo else { return } guard var keyboardFrame: CGRect = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return } keyboardFrame = view.convert(keyboardFrame, from: nil) let keyboardHeight = keyboardFrame.height }

Esto proporcionará correctamente las propiedades del marco del teclado ANTES de que aparezca el teclado.


Tuve un problema similar al usar Xcode Versión 9.0 (9A235); aunque estaba usando Swift. En mi método keyboardWillShow escribí lo siguiente:

if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { let heightValue = keyboardSize.height ... }

Curiosamente, la primera vez que se llamó a keyboardWillShow, heightValue fue 216.0, ¡pero durante las llamadas posteriores se había convertido en 0! Quizás este es un error de Xcode.

Reemplacé el UIKeyboardFrameBeginUserInfoKey con un UIKeyboardFrameEndUserInfoKey, y me solucionó el problema.


Utilizar esta:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

Para Swift, puede usar:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size