Ajuste de Contraints para la altura del keyboard iOS dentro de UIWebView

Tengo un controller de vista de browser simple utilizado como parte de un storyboard. Comienza a verse bien. Mi UIToolBar está anclado al final de la UIView través de una restricción Espacio Vertical de 0.

introduzca la descripción de la imagen aquí

Cuando golpeas algo en la página web que trae el keyboard. El UIToolBar está oculto. Entonces agregué un oyente para el cambio de visibilidad del keyboard y ajusté la restricción según la altura del keyboard. Esto parece funcionar bien.

introduzca la descripción de la imagen aquí

Sin embargo, si el usuario pulsa el button de minimizar en el keyboard, el keyboard no desaparece por completo. La barra superior de las teclas de flecha para permitir tabulación entre los campos de input (no sé cómo llamarla) seguirá siendo visible. Así que no puedo volver a establecer mi restricción en 0, tengo que configurarlo de nuevo en function de la altura del keyboard visible (lo que creo que includeía esa barra superior).

Sin embargo, cuando mi UIKeyboardDidHideNotification dispara, la altura del keyboard sigue siendo la misma, así que termino así.

introduzca la descripción de la imagen aquí

Mi lógica para mover la restricción se basa en la adquisición de la altura del keyboard de esta manera:

  // get height of visible keyboard NSDictionary* keyboardInfo = [aNotification userInfo]; NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey]; CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue]; _toolbarBottomVerticalSpaceConstraint.constant = -1 * keyboardFrameBeginRect.size.height; 

¿ UIKeyboardFrameBeginUserInfoKey no es el valor basado en utilizar en el caso de que el keyboard esté oculto?

La fuente completa de este controller de vista es en realidad muy simple en este momento, por lo que includeé todo el mismo en caso de que alguien lo solicite más tarde.

  #import "LEPopupBrowserViewController.h" @interface LEPopupBrowserViewController () @property (weak, nonatomic) IBOutlet UIWebView *webView; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *toolbarBottomVerticalSpaceConstraint; @end @implementation LEPopupBrowserViewController - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; if (_url != nil) { NSMutableURLRequest * request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:_url]]; [_webView loadRequest:request]; } } - (void) viewDidUnload { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } // Called when the UIKeyboardDidShowNotification is sent. - (void)keyboardWillShow:(NSNotification*)aNotification { // get height of visible keyboard NSDictionary* keyboardInfo = [aNotification userInfo]; NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey]; CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue]; _toolbarBottomVerticalSpaceConstraint.constant = -1 * keyboardFrameBeginRect.size.height; } // Called when the UIKeyboardWillHideNotification is sent - (void)keyboardDidHide:(NSNotification*)aNotification { // get height of visible keyboard NSDictionary* keyboardInfo = [aNotification userInfo]; NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey]; CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue]; _toolbarBottomVerticalSpaceConstraint.constant = -1 * keyboardFrameBeginRect.size.height; } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ - (IBAction)doneButtonPressed:(id)sender { // close keyboard if present [self.view endEditing:YES]; // dismiss ourselves [self dismissViewControllerAnimated:YES completion:nil]; } @end 

Actualizar

Encontré a través de alguna investigación adicional que parece que esta vista adicional se llama accessoryView . Veo muchas publicaciones de personas que intentan eliminarlo, pero no han encontrado nada donde puedas encontrar su altura con facilidad. La parte molesta sobre eliminarme es que parece que Apple puede rechazar tu aplicación.