Pregunta ¿Es posible obtener una altura de encabezado de sección de vista de tabla dinámica usando Diseño automático?


Nuevo en iOS 8, puede obtener celdas de vista de tabla dinámicas al 100% simplemente configurando la altura de fila estimada, luego distribuya 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.

¿Puede uno, por ejemplo, crear un UIView en tableView:viewForHeaderInSection:, Agrega un UILabel subvista, especifique las restricciones de diseño automático para la etiqueta frente a la vista y haga que la vista aumente de altura para ajustarse al contenido de la etiqueta, sin tener que implementar tableView:heightForHeaderInSection:?

La documentación para viewForHeaderInSection indica: "Este método solo funciona correctamente cuando tableView: heightForHeaderInSection: también se implementa". No he escuchado si algo ha cambiado para iOS 8.

Si no se puede hacer eso, ¿cuál es la mejor manera de imitar este comportamiento?


73
2018-04-05 21:17


origen


Respuestas:


Esto es posible. Es nuevo junto con las alturas de celda dinámica implementadas en iOS 8.

Es muy sencillo. Solo agregue esto en viewDidLoad:

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.estimatedSectionHeaderHeight = 25;

Luego anular viewForHeaderInSection y use Diseño automático para restringir los elementos en su vista según lo considere oportuno. ¡Eso es! No es necesario implementar heightForHeaderInSection. Y en realidad el sectionHeaderHeight no es necesario indicarlo tampoco, simplemente lo agregué para mayor claridad.

Tenga en cuenta que en iOS 11, las vistas de celdas y encabezado / pie de página utilizan alturas estimadas de forma predeterminada. Lo único que se debe hacer es proporcionar una altura estimada para informar mejor al sistema de qué esperar. El valor predeterminado es UITableViewAutomaticDimension pero debe proporcionar una mejor estimación que es la altura promedio que serán, de ser posible.


193
2018-04-21 04:53



Esto se puede lograr configurando (o devolviendo) el estimatedSectionHeaderHeight en su vista de tabla.

Si el encabezado de su sección se superpone a sus celdas después de la configuración estimatedSectionHeaderHeight, asegúrese de estar usando una estimatedRowHeight también.

(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 pueden perder).


20
2018-05-14 21:10



Lo intenté

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.estimatedSectionHeaderHeight = 25;

pero no dimensionó correctamente el encabezado con la etiqueta multilínea. Agregué esto para resolver mi problema:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Recalculates height
    tableView.beginUpdates()
    tableView.endUpdates()
}

5
2017-09-13 00:35



Yo modifiqué iuriimoz  responder. Acabo de reemplazar el método viewWillAppear:

tableView.sectionHeaderHeight = UITableViewAutomaticDimension
tableView.estimatedSectionHeaderHeight = 25


override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Recalculates height
    tableView.layoutIfNeeded() 
}

También agregue tableView.layoutIfNeeded () a

override func viewDidAppear(_ animated: Bool) {

    super.viewDidAppear(animated)
    tableView.layoutIfNeeded()
}

Para iOS 10

tableView.beginUpdates()
tableView.endUpdates()

tiene efecto de animación "fade" en viewWillAppear para mí


0
2018-04-05 13:46