UIScrollView contentInset no funciona

Estoy teniendo un problema con contentInset no funciona para un UIScrollView para trabajar con un keyboard emergente. Funciona un poco : por alguna razón necesito numbers grandes (tal vez por encima de la altura de la vista) para que haga algo, a pesar de toda la documentation de contenido. contentInset numbers pequeños como 40.0 (por ejemplo, para una barra) o la altura del keyboard.

Reproduzco el problema en una aplicación completamente nueva siguiendo estos pasos:

  1. Cree una nueva aplicación de vista única utilizando el nuevo proyecto Xcode
  2. En el guión gráfico, arrastre en una vista de desplazamiento, que llena el tamaño de vista completa
  3. En el guión gráfico, arrastre un button, en la parte inferior de la pantalla (dentro de la vista de desplazamiento)
  4. Vincula la vista de desplazamiento a una nueva propiedad en ViewController
  5. Botón de enlace a un método en ViewController
  6. Haga que el método presionado del button configure el contenido.

Aquí está el código para ViewController:

 @interface ViewController () @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @end @implementation ViewController - (IBAction)button:(id)sender { self.scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 600, 0.0); } @end 

¿Qué me falta / por qué necesito numbers grandes?

Compruebe que self.scrollView.contentSize esté configurado correctamente. Si contentSize.height es 0 (como será el caso siguiendo sus pasos), entonces se requiere un recuadro grande.

Intente agregar [self.scrollView setContentSize: CGSizeMake(320, 568)]; al método del button y notará que su recuadro ahora se comportará como se esperaba.

Matt tiene razón, tiene que ver con self.scrollView.contentSize . Estoy usando Auto Layout y el enlace que faltaba para mí establecía explícitamente la propiedad contentSize de scrollView para ser igual al tamaño de fotogtwig de my contentView (contentView es la vista dentro de mi scrollView que contiene todas las demás vistas). Mi contenidoView está codificado para tener su tamaño en function de los elementos que he colocado. Ellos "empujan" en el contenido de la vista y, por lo tanto, manejan dinámicamente el tamaño del contenido de la vista. Es como un "último paso" dentro de viewDidLayoutSubviews que enlace este tamaño dynamic en scrollView.contentSize . Ahora las cosas funcionan como se esperaba.

 // Auto Layout Solution - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.scrollView.contentSize = self.contentView.frame.size; } 

En mi caso, olvidé conectar el ScrollView en el Interface Builder …