2009-12-31 9 views

Respuesta

210

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

He aquí una buena iOS Reference Library article on scroll views que tiene una pantalla informativa (fig 1-3) - Voy a replicarlo a través de texto aquí:

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


    (cH = contentSize.height; cW = contentSize.width) 

La vista de desplazamiento encierra la vista de contenido más lo que se proporciona el acolchado por las inserciones de contenido especificado.

+0

¿Se usa para agregar un relleno al UIScrollView? Si no, ¿podría darme un ejemplo práctico? Mi problema no es cómo implementarlo sino cuándo implementarlo. – ForeignerBR

+27

Sí, rellena el contenido en el interior de la vista de desplazamiento. Es similar a la propiedad CSS 'relleno '. –

+0

Lamento aprovechar esto, puedo mover su propia pregunta, pero en base a esto, ¿qué ocurre realmente si configuras cada valor de contentInset a 0 además del contenidoHeight por ejemplo? ¿Eso obliga a la vista de desplazamiento completa a ser la altura que configuró? – jakev

2

Una gran pregunta.

consideremos el siguiente ejemplo (scroller es una 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 su rueda de desplazamiento para tener una "ventana" en el contenido donde lo desee. Todavía estoy jugando con este código de muestra, pero la idea está ahí: usa las inserciones para obtener una "ventana" en tu UIScrollView.

76

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. Voy a tomar prestado de sus diagramas:

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

Eso es lo que se obtiene cuando se hace, pero la utilidad de solamente me aparece cuando se desplaza:

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

Esa fila superior del contenido seguirá siendo visible porque todavía está dentro del marco de la vista de desplazamiento. Una forma de pensar en el desplazamiento superior es "cuánto desplazar el contenido hacia abajo en la vista de desplazamiento cuando estamos desplazados hasta la parte superior"

Para ver un lugar donde realmente se usa, observe la construcción -en la aplicación de fotos 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.

+0

Lo bueno aquí es que puede usar las inserciones para crear el efecto "Desplazarse por la barra de estado con desenfoque". – TheEye

+0

Una buena explicación, votado. –

+0

Ejemplo de aplicación de fotos fue fácil de entender. – abhi1992

7

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

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

TOP BUTTONS 

TEXT 

BOTTOM TAB BAR 

y que desea que el texto no aparece de forma transparente por debajo de los botones superiores, pero queremos que aparezca el texto debajo de la barra de pestañas INFERIOR y aún así permitir el desplazamiento para que podamos actualizar el texto sentado de forma transparente debajo de la BARRA DE LA PESTAÑA.

Luego establecemos que el origen superior esté debajo de los BOTONES SUPERIORES, y la altura para incluir la parte inferior de la BARRA INFERIOR DE LAS PESTAÑAS. 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 permite 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.

1

Se utiliza para agregar relleno en UIScrollView

Sin contentInset, una vista de tabla es la siguiente:

enter image description here

asentando después contentInset:

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

El efecto es la siguiente :

enter image description here

Parece ser mejor, ¿no?

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