2011-11-30 18 views
9

Imagine, hay un UIViewController con un UIScrollView en él. En la parte superior de la vista hay un UIImageView, algunos UILabels y otras cosas. Además, hay una UITableView cuyo contenido es Prototipos dinámicos. Adjunto una imagen para que quede claro:UITableView en UIScrollView: cómo hacer que la vista se desplace, pero no TableView en sí misma?

enter image description here

no tengo una cantidad estática de las células en el UITableView lo que podría ser desplazable. Mi problema es el siguiente: el UITableView se desplaza por sí mismo pero quiero desplazar toda la Vista. ¿Cuál es la mejor posibilidad para hacer eso?


soluciones posibles que he fundé hoy

1) Lo primero es: creo una UITableViewController y declarar una sección de cabecera en la que incluyo todos mis etiquetas, imágenes, etc programación (me gustaría para usar el constructor de interfaz para eso ...)

2) Otra solución es calcular la altura de la vista. Intenté hacer lo mejor de esta manera, pero sin éxito. Si esta es la mejor manera de hacerlo: ¿Alguien puede dar un ejemplo?

Respuesta

19

Me gustaría abandonar el UIScrollView y simplemente usar un UITableView. Puede agregar un objeto UIView como tableHeaderView del UITableView simplemente arrastrándolo en el Creador de interfaz. Ahora que todo forma parte de la jerarquía UITableView, todo se desplazará como se espera.

+0

Muchas gracias! Usted ha hecho mi día - es como un regalo de Navidad preferido; o) –

+1

/toca el dedo en la nariz y hasta cohetes de SO chimenea –

+0

le dio una upvote, muy buena respuesta. Mejor que el mío. :) –

1

Tendrá que (como ha mencionado) agregar el UIView que contiene la imagen y los botones al UITableView real. Incrustarlo en la vista de desplazamiento producirá el comportamiento no deseado que estás viendo.

Recomendaría devolver UIView como la vista de encabezado para la primera sección de su vista de tabla. Usted puede hacer esto mediante la aplicación del método de UITableViewDelegate:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; 

Si usted mantiene una IBOutlet a la vista que contiene su imagen/etiquetas, puede volver aquí.

+0

Gracias por su respuesta. Si lo hago así, tengo que implementar todas las imágenes/etiquetas programáticamente, ¿verdad? Quiero evitar eso ... –

+0

No, aún puedes usar el Interface Builder, siempre y cuando el 'UIView' que contiene tus imágenes/etiquetas se defina como' IBOutlet' en 'UITableViewDelegate'. –

+0

ah bien! Ahora entiendo lo que quieres decir. ¡Tienes razón! Una gran solución, gracias por eso :-) –

2

También puede intentar configurar delaysContentTouches en NO en su scrollView. Dependiendo de su configuración, esto puede hacer que la vista de desplazamiento responda al toque primero en lugar de a la vista de tabla.

De Manzanas UIScrollView Docs:

delaysContentTouches

Un valor booleano que determina si la vista de desplazamiento retrasa el manejo de gestos táctiles hacia abajo.

@property(nonatomic) BOOL delaysContentTouches

Discusión

Si el valor de esta propiedad es YES, la vista de desplazamiento de manipulación el gesto táctil hacia abajo hasta que se pueda determinar si el desplazamiento es la intención retrasos.Si el valor es NO, la vista de desplazamiento llama inmediatamente al touchesShouldBegin:withEvent:inContentView:. El valor predeterminado es YES.

+0

Voy a intentar esto también, parece ser otra gran solución. Gracias :-) –

Cuestiones relacionadas