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


¿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;
}

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.


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];
}

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)


4

Para swift 4.2, debe devolver UITableView.automaticDimension


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.


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];
}

[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];
}

Creo que te refieresreturn [self sectionHeaderHeight];
TMB

@ TMB [self sectionHeaderHeight];produce un error. Quiso decir [tableView sectionHeaderHeight];?
jk7
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.