teclado pro control configurar como centro acomodar ios ipad keyboard ios9

pro - La vista alineada con la parte superior del teclado aparece en un lugar incorrecto en el modo de barra de acceso directo iOS 9



configurar teclado ipad pro (1)

El problema es que la mayoría del código ( incluido el de Apple) ignora el hecho de que UIKeyboardFrameEndUserInfoKey es un CGRect y no un CGSize .

// ❌ Bad code, do not use - (void)keyboardWasShown:(NSNotification*)aNotification { NSDictionary* info = [aNotification userInfo]; CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; CGRect bkgndRect = activeField.superview.frame; bkgndRect.size.height += kbSize.height; [activeField.superview setFrame:bkgndRect]; [scrollView setContentOffset:CGPointMake(0.0, activeField.frame.origin.y-kbSize.height) animated:YES]; }

Aquí puede ver que solo se usa la altura del teclado ( kbSize.height ). El origen del rect es importante y no debe ignorarse.

Cuando el teclado está visible, este es el rect que se informa:

Cuando el teclado está en modo de barra de acceso directo, este es el rect:

Observe cómo la mayoría del teclado está fuera de pantalla, pero aún tiene la misma altura.

Para obtener el comportamiento correcto, use CGRectIntersection con los límites de la vista y el marco del teclado dentro de esa vista:

// ✅ Good code, use CGRect keyboardScreenEndFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGRect keyboardViewEndFrame = [self.view convertRect:keyboardScreenEndFrame fromView:self.view.window]; CGRect keyboardFrame = CGRectIntersection(self.view.bounds, keyboardViewEndFrame); CGFloat keyboardHeight = keyboardFrame.size.height; // = 55

Por este mismo motivo, UIKeyboardFrameEndUserInfoKey debe usarse en lugar de UIKeyboardFrameBeginUserInfoKey .

iOS 9 agrega una barra de acceso directo a la barra de iOS 8 QuickType .

Como parte de este cambio, si conecta un teclado bluetooth a un iPad, el teclado está en un modo de barra de acceso directo minimizado (que se puede simular presionando command-k en el simulador).

Tengo un código que obtiene la altura del teclado usando un método similar al siguiente:

CGRect keyboardFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGFloat keyboardHeight = keyboardFrame.size.height; // = 313

El problema es que cuando el teclado se alterna entre el estado expandido y colapsado, la altura sigue siendo la misma, lo que hace que mi vista aparezca en su ubicación anterior:

Comportamiento deseado:


(Observe cómo la vista roja está conectada a la parte superior del teclado)

Comportamiento real:

¿Cuál es la forma correcta de conectar la vista roja a la parte superior del teclado?