iOS 11: la altura del teclado regresa a 0 en la notificación del teclado

He estado usando notificaciones de teclado sin ningún problema y obtengo 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 invoca la notificación.

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

Utilizar esta:

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

Para Swift, puede usar:

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

Reemplazar UIKeyboardFrameBeginUserInfoKey

con

UIKeyboardFrameEndUserInfoKey

El siguiente es de Apple Docs.

UIKeyboardFrameBeginUserInfoKey- La clave para un objeto NSValue que contiene un CGRect que identifica el cuadro de inicio del teclado en coordenadas de pantalla.

UIKeyboardFrameEndUserInfoKey – La clave para un objeto NSValue que contiene un CGRect que identifica el cuadro final del teclado en coordenadas de pantalla.

Prueba esto:

Reemplace UIKeyboardFrameBeginUserInfoKey con UIKeyboardFrameEndUserInfoKey

Tuve un problema similar con 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 ... } 

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

Reemplacé el UIKeyboardFrameBeginUserInfoKey con un UIKeyboardFrameEndUserInfoKey, y solucionó el problema por mí.

Este problema está sucediendo 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