Tengo un UITableView con dos secciones. Es una vista de tabla simple. Estoy usando viewForHeaderInSection para crear vistas personalizadas para estos encabezados. Hasta aquí todo bien.
El comportamiento de desplazamiento predeterminado es que cuando se encuentra una sección, el encabezado de la sección permanece anclado debajo de la barra de navegación, hasta que la siguiente sección se desplaza a la vista.
Mi pregunta es esta: ¿puedo cambiar el comportamiento predeterminado para que los encabezados de sección NO permanezcan anclados en la parte superior, sino que se desplace debajo de la barra de navegación con el resto de las filas de sección?
¿Me estoy perdiendo algo obvio?
Gracias.
ios
iphone
uitableview
cocoa-touch
davidjhinson
fuente
fuente
Respuestas:
La forma en que resolví este problema es ajustar el de
contentOffset
acuerdo con elcontentInset
en elUITableViewControllerDelegate
(se extiendeUIScrollViewDelegate
) de esta manera:El único problema aquí es que pierde un poco de rebote al desplazarse hacia arriba.
{NOTA: El "40" debe ser la altura exacta de SU encabezado de sección 0. Si usa un número que es más grande que la altura del encabezado de la sección 0, verá que la sensación del dedo se ve afectada (intente como "1000" y verá que el comportamiento de rebote es algo extraño en la parte superior). si el número coincide con la altura del encabezado de la sección 0, la sensación del dedo parece ser perfecta o casi perfecta.}
fuente
También puede agregar una sección con cero filas en la parte superior y simplemente usar el pie de página de la sección anterior como encabezado para la siguiente.
fuente
Si hiciera esto, aprovecharía el hecho de que UITableViews en el estilo plano tiene los encabezados adhesivos y los del estilo agrupado no. Probablemente al menos intente usar una celda de tabla personalizada para imitar la apariencia de las celdas simples en una tabla agrupada.
En realidad no lo he intentado, así que puede que no funcione, pero eso es lo que sugeriría hacer.
fuente
tableView.separatorColor = [UIColor clearColor];
para imitar una vista de tabla simple.Sé que llega tarde, ¡pero he encontrado la solución definitiva!
Lo que quiere hacer es si tiene 10 secciones, deje que dataSource devuelva 20. Use números pares para los encabezados de sección y números impares para el contenido de la sección. algo como esto
Voilá! :RE
fuente
UITableView
que estoy usando.Hay varias cosas que deben hacerse para resolver este problema de una manera no hacky:
UITableViewStyleGrouped
backgroundColor
en[UIColor clearColor]
backgroundView
celda de vista de cada tabla en una vista vacía conbackgroundColor [UIColor clearColor]
rowHeight
adecuada o anuletableView:heightForRowAtIndexPath:
si las filas individuales tienen alturas diferentes.fuente
UITableViewStyleGrouped
las celdas de la tabla tienen márgenes adicionales que cambian su alineación con el encabezado. Este es un problema cuando realmente desea representar una tabla de varias columnas y usar el encabezado para mostrar los títulos de las columnas (y luego hacer que las entradas individuales de la tabla se alineen con estos títulos).Publicado originalmente aquí , una solución rápida utilizando el IB. Lo mismo se puede hacer mediante programación aunque de manera bastante simple.
Algunas personas comentaron que esta solución oculta el primer encabezado, sin embargo, no he notado ningún problema. Funcionó perfectamente para mí y fue, con mucho, la solución más simple que he visto hasta ahora.
fuente
No estaba contento con las soluciones descritas aquí hasta ahora, así que intenté combinarlas. El resultado es el siguiente código, inspirado en @awulf y @cescofry. Funciona para mí porque no tengo un encabezado de vista de tabla real. Si ya tiene un encabezado de vista de tabla, puede que tenga que ajustar la altura.
fuente
Simplemente cambie el estilo de TableView:
Documentación UITableViewStyle :
fuente
Seleccione el estilo de Vista de tabla agrupada del Inspector de atributos de tableView en el guión gráfico.
fuente
Establezca el headerView de la tabla con una vista transparente con la misma altura del encabezado en la vista en sección. También inicie la vista de tabla con un marco a altura.
fuente
Encontré una solución alternativa, use la primera celda de cada sección en lugar de una sección de encabezado real, esta solución no parece tan limpia, pero funciona tan bien, puede usar una celda prototipo definida para su sección de encabezados y en el método cellForRowAtIndexPath solicite indexPath.row == 0, si es verdadero, use la celda prototipo de la sección de encabezado, de lo contrario use su celda prototipo predeterminada.
fuente
indexPath.row
&indexPath.section
, asegúrese de devolver una altura de0.0f
para- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
que sus encabezados sean invisibles.Cambie su estilo de TableView:
Según la documentación de Apple para UITableView:
fuente
Ahora que el estilo agrupado se ve básicamente igual que el estilo plano en iOS 7 (en términos de planitud y fondo), para nosotros la mejor y más fácil (es decir, menos hacky) fue simplemente cambiar el estilo de la vista de tabla a agrupado. Jacking con contentInsets siempre fue un problema cuando integramos una barra de navegación desplazable en la parte superior. Con un estilo de vista de tabla agrupada, se ve exactamente igual (con nuestras celdas) y los encabezados de sección permanecen fijos. Sin desplazamiento de rareza.
fuente
Asigne un recuadro negativo a su tableView. Si tiene encabezados de sección alta de 22px, y no desea que sean adhesivos, justo después de volver a cargar los datos, agregue:
Funciona como un encanto para mí. También funciona para los pies de página de sección, solo asigne el recuadro negativo en la parte inferior.
fuente
Agrego la tabla a una Vista de desplazamiento y eso parece funcionar bien.
fuente
Mira mi respuesta aquí . Esta es la forma más fácil de implementar los encabezados de sección no flotantes sin ningún truco.
fuente
La respuesta de @ LocoMike se ajustó mejor a mi tableView, sin embargo, también se rompió al usar pies de página. Entonces, esta es la solución corregida cuando se usan encabezados y pies de página:
fuente
Versión rápida de la respuesta @awulf, ¡que funciona muy bien!
fuente
Aprendí que solo establecer la propiedad tableHeaderView lo hace, es decir:
y eso es.
fuente