Altura predeterminada para el encabezado de sección en UITableView

125

Quiero establecer la altura del primer encabezado en mi UITableView. Para los otros encabezados, quiero que mantengan la altura predeterminada. ¿Qué valor / constante puedo poner en lugar de "someDefaultHeight" en el código a continuación?

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return someDefaultHeight;
}

Gracias

rienda
fuente
¿Por qué no pruebas diferentes valores hasta que te vuelves feliz?
Daniel
44
@Daniel: si Apple alguna vez decide cambiar el valor predeterminado de la altura de la fila, entonces debo asegurarme de que mi aplicación no codifique este valor (a una cantidad arbitraria). Es mejor extraer esta información de una constante si se declara en alguna parte.
rienda el

Respuestas:

204

En IOS 5.0 en adelante, puede devolver UITableViewAutomaticDimension en la mayoría de los métodos de delegado. Está en la parte inferior de la página de documentación.

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return UITableViewAutomaticDimension;
}
Ajaxharg
fuente
1
hmm .. En cuanto a mí UITableViewAutomaticDimensionregresa -1(const codificado) y no veo ninguna sección en mi UITableView.
skywinder
¿Por qué UITableViewAutomaticDimensionmuestra -1 cuando NSLog?
S1U
30
Esto solo funciona cuando usa: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionsi está implementando el - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionmétodo, esto no funciona.
SuperSaiyen
2
Vale la pena señalar, si implementa esto y el método de delegado estimado y lo devuelve UITableViewAutomaticDimensiontendrá una altura cero.
Sam Soffes
44
@SuperSaiyen - Funciona con viewForHeaderInSectionusted solo necesita configurarloestimatedSectionHeaderHeight
Robert
48

Al verificar los valores predeterminados en mi aplicación, parece que para una tabla agrupada el valor predeterminado es una altura de 22 y para una tabla no agrupada, el valor predeterminado es una altura de 10.

Si marca el valor de la propiedad sectionHeaderHeight en su vista de tabla, eso debería indicarle.

paulthenerd
fuente
1
Gracias ... lo codificaré para esto. Aunque desearía que hubiera una constante para este valor.
rienda el
3
Tienes estos al revés. UITableViewStyleGroupedtiene 22 años y UITableViewStylePlaines 10.
Michael Grinich
25

Realmente haz el truco :)

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return kFirstSectionHeaderHeight;
    return [self sectionHeaderHeight];
}
BadPirate
fuente
2
Creo que quería decir return [self.tableView sectionHeaderHeight];, o mejor aún, return [tableView sectionHeaderHeight];. Sin embargo, ambos devuelven -1 para mí, tal vez porque no estoy usando una punta o un guión gráfico.
jk7
7

En aras de la integridad: en iOS7 + la altura de los encabezados de sección de estilo agrupados es 55.5para los primeros y 38siguientes encabezados. (medido con DCIntrospect)

ronhippler
fuente
4

Para swift 4.2, debe devolver UITableView.automaticDimension

Muvimotv
fuente
2

No estoy seguro de cuál es la respuesta correcta aquí, pero ni 10 ni 22 parecen tener la altura correcta para una vista de tabla agrupada en iOS 5. Estoy usando 44, según esta pregunta, y al menos parece ser más o menos La altura correcta.

Jason George
fuente
2

Para obtener la altura predeterminada, simplemente déjelo supermanejar:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return [super tableView:tableView heightForHeaderInSection:section];
}
Hendrik
fuente
[super tableView:tableView heightForHeaderInSection:section];devuelve 0 para mí, tal vez porque no estoy usando una plumilla o guión gráfico.
jk7
1
Esto solo funciona si está subclasificando UITableViewController.
Wallace
-1

Esto debería funcionar

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return [tableView rowHeight];
}
Yogesh D
fuente
Creo que te refieresreturn [self sectionHeaderHeight];
TMB
@ TMB [self sectionHeaderHeight];produce un error. Quiso decir [tableView sectionHeaderHeight];?
jk7