¿Para qué sirve la propiedad UIScrollView contentInset?

¿Puede alguien explicarme para qué se usa la propiedad contentInset en una instancia de UIScrollView ? Y tal vez dar un ejemplo?

Establece la distancia del recuadro entre la vista de contenido y la vista de desplazamiento adjunta. aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);

Aquí hay un buen artículo de la Biblioteca de Referencia de iOS sobre vistas de desplazamiento que tiene una captura de pantalla informativa (fig. 1-3) – Lo replicaré a través del texto aquí:

  _|←_cW_→_|_↓_ | | --------------- |content| ↑ ↑ |content| contentInset.top cH |content| ↓ |content| contentInset.bottom |content| ↓ --------------- _|_______|___ ↑ (cH = contentSize.height; cW = contentSize.width) 

La vista de desplazamiento incluye la vista de contenido más el relleno proporcionado por las inserciones de contenido especificadas.

Si bien la respuesta de jball es una excelente descripción de las inserciones de contenido, no responde a la pregunta de cuándo usarla. Tomaré prestado de sus diagtwigs:

  _|←_cW_→_|_↓_ | | --------------- |content| ↑ ↑ |content| contentInset.top cH |content| ↓ |content| contentInset.bottom |content| ↓ --------------- |content| -------------↑- 

Eso es lo que obtienes cuando lo haces, pero la utilidad de esto solo se muestra cuando te desplazas:

  _|←_cW_→_|_↓_ |content| ← content is still visible --------------- |content| ↑ ↑ |content| contentInset.top cH |content| ↓ |content| contentInset.bottom |content| ↓ --------------- _|_______|___ ↑ 

Esa fila superior de contenido seguirá siendo visible porque aún está dentro del marco de la vista de desplazamiento. Una forma de pensar en el desplazamiento superior es “cuánto desplazar el contenido por la vista de desplazamiento cuando estamos desplazados hacia arriba”.

Para ver un lugar donde realmente se usa, mira la aplicación de fotos incorporada en el iphone. La barra de navegación y la barra de estado son transparentes, y el contenido de la vista de desplazamiento se ve debajo. Eso es porque el marco de la vista de desplazamiento se extiende tan lejos. Pero si no fuera por el recuadro de contenido, nunca podrás borrar la parte superior del contenido de esa barra de navegación transparente cuando llegues a la cima.

Las inserciones de contenido resuelven el problema de tener contenido que se encuentra debajo de otras partes de la interfaz de usuario y, sin embargo, sigue siendo accesible mediante barras de desplazamiento. En otras palabras, el objective del recuadro de contenido es hacer que el área de interacción sea más pequeña que su área real.

Considere el caso donde tenemos tres áreas lógicas de la pantalla:

 TOP BUTTONS TEXT BOTTOM TAB BAR 

y queremos que el TEXTO nunca aparezca de forma transparente debajo de los BOTONES SUPERIORES, pero queremos que el Texto aparezca debajo de la BARRA DE LA PESTAÑA INFERIOR y aún permita el desplazamiento para que podamos actualizar el texto de forma transparente bajo la BARRA DE PESTAÑAS INFERIOR.

Luego, estableceríamos el origen superior debajo de los BOTONES SUPERIORES, y la altura para incluir la parte inferior de la BARRA TABLA INFERIOR. Para obtener acceso al texto que se encuentra debajo del contenido BOTTOM TAB BAR, estableceríamos el recuadro inferior a la altura de la BARRA INFERIOR DE LA PESTAÑA.

Sin el recuadro, la barra de desplazamiento no le permitiría desplazarse hacia arriba del contenido lo suficiente como para escribir en él. Con el recuadro, es como si el contenido tuviera un “CONTENIDO EN BLANCO” adicional al tamaño del recuadro de contenido. El texto en blanco se ha “insertado” en el “contenido” real; así es como recuerdo el concepto.

Se usa para agregar relleno en UIScrollView

Sin contentInset , una vista de tabla es así:

enter image description here

A continuación, configure contentInset :

 tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0) 

El efecto es el siguiente:

enter image description here

Parece ser mejor, ¿verdad?

Y escribo un blog para estudiar el contentInset , las críticas son bienvenidas.

Gran pregunta

Considere el siguiente ejemplo ( scroller es un UIScrollView):

 float offset = 1000; [super viewDidLoad]; for (int i=0;i<500; i++) { UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(i * 100, 50, 95, 100)] autorelease]; [label setText:[NSString stringWithFormat:@"label %d",i]]; [self.scroller addSubview:label]; [self.scroller setContentSize:CGSizeMake(self.view.frame.size.width * 2 + offset, 0)]; [self.scroller setContentInset:UIEdgeInsetsMake(0, -offset, 0, 0)]; } 

Las inserciones son la ÚNICA manera de forzar a tu desplazamiento a tener una "ventana" en el contenido donde lo desees. Todavía estoy jugando con este código de muestra, pero la idea está ahí: use las inserciones para obtener una "ventana" en su UIScrollView .