Acceso a los methods "pnetworkingeterminados" de UITableView

Intento configurar un tableView. Utilizo celdas estándar para las filas de todas las secciones excepto en la última sección (que contiene una fila). Por lo tanto, también me gustaría usar el layout estándar para todas esas secciones, excepto esa especial.

Un breve ejemplo es el siguiente, mi celda "especial" está en la sección 3 (solo hay una fila):

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (section == 3) return 5; return **????**; } 

A ??? Me gustaría devolver el ancho calculado desde UITableView (al igual que si no implementara el método).

[super self: tableView heightForHeaderInSection: (NSInteger) sección];

no funciona. Sé que puedo acceder

 [tableView setionHeaderHeight] 

que es por defecto 10 y, obviamente, no tiene en count que tengo encabezados de sección para las otras secciones, lo que requerirá espacio adicional. Intenté eso, pero luego obtendré las secciones demasiado cerca (ver captura de pantalla):

(Nota: la sección en la que estoy interesado es la que no se parece a una celda: la que tiene las dates (background invisible)). texto alternativo

Por lo tanto, lo más fácil sería entregar el layout a la implementación estándar que es perfecta, excepto para la sección 3.

¿Cuáles son mis opciones?

No tiene un super tableView:heightForHeaderInSection: implementación tableView:heightForHeaderInSection: ya que no está subclasificando ninguna implementación base abstracta para UITableViewDelegate . La vista de la tabla se decide, en cambio, si la altura pnetworkingeterminada se debe utilizar inspeccionando la implementación de su delegado para ver si el método está disponible.

Es un concepto bastante extenso para darle la vuelta, especialmente si proviene de Java o C #. Los methods en los protocolos Objective-C pueden ser opcionales, y su ausencia significa usar el valor pnetworkingeterminado .

Su método probablemente debería implementarse como:

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (section == 3) { return 5; } else { return 36; } } 

La altura pnetworkingeterminada para las vistas de tabla agrupadas y planas es diferente (22 puntos para plano). Los valores pnetworkingeterminados no están expuestos por UITableView , ni siquiera como methods privados. File bug en http://bugreport.apple.com para hacer de esto una constante pública.

Por si acaso: hay una nueva constante introducida en iOS 5, llamada UITableViewAutomaticDimension . Como dice la documentation, debe devolverlo del método de delegado cuando desee que UITableView use un valor pnetworkingeterminado.

Entonces, el código para su caso sería:

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (section == 3) { return 5; } else { return UITableViewAutomaticDimension; } } 

Pareces un poco confundido acerca de heightForHeaderInSection : devuelve el alto del encabezado de una sección de la tabla (este es el "título" de una sección de la tabla), no una fila. iOS llama a este método para solicitar la altura de solo un encabezado de una sola sección, independientemente de cualquier otro encabezado de sección que pueda haber.

Si desea utilizar el valor pnetworkingeterminado, simplemente devuelva [tableView sectionHeaderHeight] para cualquier sección que no sea 3 : no necesita "tener en count que [usted] tiene otros encabezados de sección", ya que está pidiendo la altura del encabezado solo para la section Preguntará de nuevo las alturas de los demás (y calculará las posiciones relativas con filas y otras secciones automáticamente).

Después de anular heightForHeaderInSection y hacer una comparación de lado a lado, la altura del encabezado en la primera fila es mayor que el rest. Esto no es un pixel perfecto, pero está muy cerca:

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (section == 0 ) { return 46.0; } else if (section == myCustomRow) { return 12345.0; // custom height } else { return 36.0; } }