¿Puede alguien explicarme para qué se utiliza la propiedad contentInset en una instancia UIScrollView
? Y tal vez dar un ejemplo?¿Para qué sirve la propiedad UIScrollView contentInset?
Respuesta
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.
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
.
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.
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.
Se utiliza para agregar relleno en UIScrollView
Sin contentInset
, una vista de tabla es la siguiente:
asentando después contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
El efecto es la siguiente :
Parece ser mejor, ¿no?
Y escribo un blog para estudiar el contentInset
, las críticas son bienvenidas.
- 1. ¿Para qué sirve la propiedad .NET Control.Margin?
- 2. Center UIImageView inside UIScrollView without contentInset?
- 3. ¿Para qué sirve la transformación CSS: la propiedad translate()?
- 4. ¿De qué sirve la propiedad Tag en .net
- 5. Meta Programación, ¿para qué sirve?
- 6. ¿Para qué sirve generator.throw()?
- 7. ¿Para qué sirve pushState?
- 8. ¿Para qué sirve UnmanagedMemoryStream?
- 9. ¿Para qué sirve memcache.hash_strategy?
- 10. ¿Para qué sirve PowerShell?
- 11. ¿Para qué sirve Clojure?
- 12. ¿Para qué sirve __path__?
- 13. ¿Para qué sirve SDKDDKVer.h?
- 14. ¿Para qué sirve ApplicationDomain.domainMemory?
- 15. Cakephp, ¿para qué sirve?
- 16. ¿Para qué sirve Automapper?
- 17. System.Web.Abstractions: ¿para qué sirve?
- 18. ¿Para qué sirve Enum?
- 19. ¿Para qué sirve AnyVal.types?
- 20. ¿Para qué sirve cURL?
- 21. Para qué sirve Page.LoadComplete (en la práctica)
- 22. ¿Para qué sirve la búsqueda exhaustiva?
- 23. ¿Para qué sirve realmente la protección CSRF?
- 24. ¿Para qué sirve la ventana de Hamming?
- 25. ¿Para qué sirve la clase A [_]?
- 26. ¿Para qué sirve WS-Addressing?
- 27. Oficialmente, ¿para qué sirve typename?
- 28. ¿Para qué sirve sql-dump?
- 29. ¿Para qué sirve ASP.NET MVC?
- 30. ¿Para qué sirve `type_info :: before`?
¿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
Sí, rellena el contenido en el interior de la vista de desplazamiento. Es similar a la propiedad CSS 'relleno '. –
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