Vistas de encabezado de tabla en StoryBoards

191

¿Hay alguna manera de insertar una Vista de encabezado de tabla (tableHeaderView) en StoryBoard (como solíamos hacer en Interface Builder)?

Tyler DeWitt
fuente

Respuestas:

349

Parece que uno simplemente arrastra un control a la parte superior de la vista de tabla. No esperaba que fuera tan fácil.

Antes de caer

Antes de caer

After Drop

After Drop

Señor Rogers
fuente
29
Me sorprendió descubrir que así es como se hace. Noté en mi implementación que para que esto funcione correctamente, tuve que eliminar mi código de sección heightForHeaderInSection: (NSInteger) de lo contrario terminaría con espacio adicional sobre la vista del encabezado. Además, para que este encabezado se "pegue" en la parte superior de la vista de tabla, tuve que implementar la sección viewForHeaderInSection: (NSInteger) y devolver esta vista.
ozz
13
Esto solo parece funcionar si tiene al menos una celda prototipo en la tabla.
Accatyyc
44
@cdo, ¿puedes explicar cómo lograste que el encabezado se "pegue" en la parte superior de la vista de tabla? Intenté implementar a ciegas viewForHeaderInSection:y recibí un error que decía "No se pueden satisfacer las restricciones simultáneamente". (Vea mi pregunta aquí: stackoverflow.com/questions/14554051/… )
ryanrhee
2
Gracias, no pude hacer eso hasta que supe que funcionaría, requiere precisión de arrastre. Intenté hacerlo varias veces ...
Dave Ross
1
Puede usar el esquema de la izquierda para arrastrar, lo que es más fácil de hacer que intentar alcanzar el punto exacto sobre la primera celda prototipo, si desea establecer la vista del encabezado de la tabla. Noté, tal vez un error de Xcode (5.0), que esto solo funcionaría cuando primero hubiera movido la vista fuera de la jerarquía normal; Lo arrastré hasta el final del contorno de esa escena. Luego, en un segundo paso, podría moverlo a la vista de tabla.
Daniel Schneller
10

Puede hacerlo fácilmente arrastrando su UIView/ UIImageViewjusto debajo del UITableViewesquema del documento (en lugar del diseño).

Si intenta arrastrar el diseño en lugar del esquema del documento UITableViewCell, saltará al manejo superior, ¡lo cual es frustrante!

PANKAJ VERMA
fuente
-2

Arrastrar y soltar una vista en la parte superior de la vista de tabla funcionó solo para un tamaño de pantalla, al menos en Xcode 11. No se dimensionó bien en diferentes pantallas.

Acabo de crear una vista y la dejé allí detrás de la vista de tabla en el guión gráfico. Creé un IBOutlet para ello:

@IBOutlet weak var audioView: UIView!

Luego, en el código de vista de tabla, hice:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return audioView
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 142
}

Funcionó bien en todos los tamaños de pantalla.

Badr
fuente
1
La pregunta es sobre la vista de encabezado de tabla, no sobre las vistas de encabezado de sección.
R. Rincón
@R. Rincón, ¿dónde mencioné un encabezado de sección? La sección de los métodos es necesaria desde el marco. Cada TableView tiene al menos una sección si no lo sabe. Simplemente pase la sección 0 si no tiene secciones.
Badr
Este código devuelve audioView para cada sección como encabezado de sección. Si alguien implementa esto, tableView.tableHeaderView será nulo. Si tienen 5 secciones, tendrán cinco encabezados de sección. Si ya tienen encabezados de sección y desean agregar una vista de encabezado de tabla, esta respuesta no los ayuda. Esto no responde la pregunta, que menciona específicamente tableHeaderView.
R. Rincón
Puede especificar la vista de encabezado para cada sección con cierta lógica dentro del método. TableViews creados con secciones en mente. Siempre tiene secciones, si no las tiene, entonces esa sería la sección 0. No hay ningún método para especificar la vista de encabezado sin especificar una sección.
Badr