¿Es posible get una altura de encabezado de sección de vista de tabla dinámica utilizando el layout automático?

Nuevo en iOS 8, puede get 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 boostá de altura. Esto es extremadamente útil, y me pregunto si se puede lograr la misma proeza para los encabezados de sección en una vista de tabla.

Por ejemplo, una UIView crear una vista UIView en tableView:viewForHeaderInSection: agregar una UILabel , especificar las restricciones de layout automático para la label con respecto a la vista y boost la vista en altura para ajustarse al contenido de la label, sin tener que implementar tableView:heightForHeaderInSection: 😕

La documentation de viewForHeaderInSection dice: "Este método solo funciona correctamente cuando tableView: heightForHeaderInSection: también está implementado". 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?

Esto es posible. Es nuevo justo al lado de las alturas de celdas dinámicas implementadas en iOS 8.

Es muy sencillo. Simplemente agregue esto en viewDidLoad :

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

A continuación, viewForHeaderInSection y utilice Auto Layout para restringir los elementos de su vista como se considere adecuado. Hecho. No es necesario implementar heightForHeaderInSection . Y, en realidad, no es necesario que se sectionHeaderHeight la sectionHeaderHeight , simplemente la agregué para mayor claridad.

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

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

Si el encabezado de la sección se superpone a sus celdas después de establecer estimatedSectionHeaderHeight , asegúrese de que está utilizando un 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 podrían omitir).

Lo intenté

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

pero no clasificó correctamente el encabezado con label multilínea. Añadió esto para resolver mi problema:

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Recalculates height tableView.beginUpdates() tableView.endUpdates() }