Como novedad en iOS 8, puede obtener celdas de vista de tabla 100% dinámicas simplemente configurando la altura de fila estimada, luego diseñe sus elementos en la celda usando Diseño automático. Si el contenido aumenta en altura, la celda también aumentará en altura. Esto es extremadamente útil y me pregunto si se puede lograr la misma hazaña para los encabezados de sección en una vista de tabla.
Se puede, por ejemplo, crear una UIView
en tableView:viewForHeaderInSection:
, añadir una UILabel
vista secundaria, especificar restricciones de diseño automático para el sello contra la visión, y tienen la vista incremento en la altura para adaptarse a los contenidos de la etiqueta, sin tener que implementar tableView:heightForHeaderInSection:
?
La documentación para los viewForHeaderInSection
estados: "Este método solo funciona correctamente cuando también se implementa tableView: heightForHeaderInSection:". No he escuchado si algo ha cambiado para iOS 8.
Si uno no puede hacer eso, ¿cuál es la mejor manera de imitar este comportamiento?
fuente
UITableViewAutomaticDimension
dicen "si devuelve esta constante entableView:heightForHeaderInSection:
otableView:heightForFooterInSection:
,UITableView
usa una altura que se ajuste al valor devuelto detableView:titleForHeaderInSection:
otableView:titleForFooterInSection:
(si el título no lo esnil
)".estimatedSectionHeaderHeight
otableView:estimatedHeightForHeaderInSection:
ANDsectionHeaderHeight
otableView:heightForHeaderInSection:
. Además, si está utilizando los métodos de delegado, debe devolver un valor mayor que 1,00 para la estimación (comportamiento completamente indocumentado); de lo contrario, NO se llamará al delegado de altura y se utilizará la altura del encabezado de la vista de tabla predeterminada.Esto se puede lograr configurando (o devolviendo) la
estimatedSectionHeaderHeight
vista en su mesa.Si el encabezado de su sección se superpone a sus celdas después de la configuración
estimatedSectionHeaderHeight
, asegúrese de que está usando unestimatedRowHeight
.(Estoy agregando esta respuesta porque el segundo párrafo contiene una respuesta a un problema que se puede encontrar después de leer todos los comentarios que algunos podrían pasar por alto).
fuente
estimatedRowHeight
esto funciona como un encanto :)Me quedé atascado en el mismo problema en el que el encabezado obtenía una altura cero hasta y, a menos que proporcione una altura fija en el delegado para
heighForHeaderInSection
.Probé muchas soluciones que incluyen
Pero nada funcionó. Mi celular también estaba usando diseños automáticos adecuados. Las filas cambiaban su altura dinámicamente mediante el siguiente código, pero el encabezado de la sección no.
La solución es extremadamente simple y extraña también, pero tuve que implementar los métodos delegados en lugar del código de 1 línea para el
estimatedSectionHeaderHeight
ysectionHeaderHeight
que es el siguiente para mi caso.fuente
Rápido 4+
trabajando (probado 100%)
Si necesita tanto la sección como la fila con altura dinámica basada en el contenido, puede usar el siguiente código:
En viewDidLoad () escribe estas líneas:
Ahora hemos establecido la altura de la fila y la altura de la sección mediante el uso de los métodos Delegados de UITableView:
fuente
Lo intenté
pero no tenía el tamaño correcto del encabezado con etiqueta de varias líneas. Agregué esto para resolver mi problema:
fuente
tableView:estimatedHeightForHeaderInSection
y entableView:heightForHeaderInSection
lugar de definirlas en viewDidLoad.estimatedSectionHeaderHeight
solo es necesaria debajo de iOS 11En mi caso:
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
.ambientado en el guión gráfico no funciona .
anular
heightForHeaderInSection
funcionó .entorno de prueba:
fuente
Sí, me funciona. Tengo que hacer más cambios de la siguiente manera:
fuente
He modificado iuriimoz respuesta . Recién reemplazado el método viewWillAppear:
También agregue el tableView.layoutIfNeeded () a
Para iOS 10
tiene un efecto de animación "desvanecimiento" en la vista
fuente