Mueva UIScrollView cuando el keyboard entre en su lugar

[Editar:] El problema se ha resuelto. No tenía mis delegates vinculados correctamente en UIBuilder . El codigo es bueno!

Estoy intentando cambiar el tamaño de una vista de desplazamiento cuando aparece el keyboard. Fui a los documentos del desarrollador y encontré esta información.

http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW1

A la izquierda "Gestionar el keyboard".

En la documentation muestra un poco de código para detectar el tamaño del keyboard y luego cambiar el tamaño de UIScrollView . He colocado un post NSLog en el código de la function - (void)keyboardWasShown:(NSNotification*)aNotification así que veo que realmente se está llamando a la function, pero cuando trato de NSLog el kbSize .height siempre se valora a 0 .

¿Por qué el código que proporciona esta manzana para este propósito no funciona?

 - (void)keyboardWasShown:(NSNotification*)aNotification { NSDictionary* info = [aNotification userInfo]; CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); scrollView.contentInset = contentInsets; scrollView.scrollIndicatorInsets = contentInsets; // If active text field is hidden by keyboard, scroll it so it's visible // Your application might not need or want this behavior. CGRect aRect = self.view.frame; aRect.size.height -= kbSize.height; if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) { CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height); [scrollView setContentOffset:scrollPoint animated:YES]; } } 

Quizás desee probar la "TPKeyboardAvoidingScrollView" altamente recomendada, disponible en: https://github.com/michaeltyson/TPKeyboardAvoiding

Funciona de maravilla…

¿Alguna vez ha agregado un observador para esa notificación específica? Asegúrese de que en su método loadView haga esto:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil]; 

No olvide anular el logging del observador en el método viewDidUnload esta manera:

 [[NSNotificationCenter defaultCenter] removeObserver:self]; 

¡Déjame saber si eso funciona!

Lo he hecho varias veces con un UITableView (que es solo un UIScrollView extendido). Puedes encontrar el código en esta respuesta .

Una solución simple es agregar la extensión UIViewController + Keyboard.swift a su proyecto, con una sola línea

 setupKeyboardNotifcationListenerForScrollView(scrollView) 

Se cambiará automáticamente el tamaño cuando aparezca el keyboard. ¡No es necesario subclassar nada, solo una extensión! Está disponible en GitHub SingleLineKeyboardResize