2009-07-29 10 views
108

Quiero establecer el alto del primer encabezado en mi UITableView. Para los otros encabezados quiero que sigan siendo la altura predeterminada. ¿Qué valor/constante puedo poner en lugar de "someDefaultHeight" en el siguiente código?Altura predeterminada para el encabezado de sección en UITableView

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

    return someDefaultHeight; 
} 

Gracias

+0

que debería funcionar – Daniel

+0

¿Por qué no probar diferentes valores hasta que getone de que está satisfecho con? – Daniel

+4

@Daniel: si Apple alguna vez decide cambiar el valor de altura de fila predeterminado, entonces debo asegurarme de que mi aplicación no codifica este valor (hasta una cantidad arbitraria). Lo mejor es extraer esta información de una constante si se declara en algún lugar. – rein

Respuesta

185

En IOS 5.0 en adelante puede devolver UITableViewAutomaticDimension en la mayoría de los métodos de delegado. Su 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í 'UITableViewAutomaticDimension' devuelve' -1' (const codificado) y no veo ninguna sección en mi 'UITableView'. – skywinder

+0

por qué 'UITableViewAutomaticDimension' muestra -1 cuando' NSLog' es? – S1U

+26

Esto solo funciona cuando usa: '- (NSString *) tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) sección' si está implementando' - (UIView *) tableView: (UITableView *) tableView viewForHeaderInSection: (NSInteger) sección' método, esto no funciona. – SuperSaiyen

46

De la comprobación de los valores por defecto en mi aplicación se ve como una tabla agrupada por defecto es una altura de 22 y de una tabla no agrupado el valor predeterminado es una altura de 10.

Si comprueba el valor de la sección de propiedad HeaderHeight en su vista de tabla que debería decirle.

+1

Gracias ... Lo codificaré duro para esto. Aunque desearía que hubiera una constante para este valor. – rein

+3

Usted tiene estos al revés. 'UITableViewStyleGrouped' es 22 y' UITableViewStylePlain' es 10. –

+2

No, tiene razón; plain es 22. – pt2ph8

-1

Esto debería hacer el truco

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(indexPath.section == CUSTOM_SECTION) 
    { 
     return CUSTOM_VALUE; 
    } 
    return [tableView rowHeight]; 
} 
+0

creo que quiere decir 'return [self sectionHeaderHeight];' – TMB

+0

@TMB '[self sectionHeaderHeight];' produce un error. ¿Quisiste decir '[tableView sectionHeaderHeight];'? – jk7

24

En realidad el truco :)

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    if(section == 0) 
     return kFirstSectionHeaderHeight; 
    return [self sectionHeaderHeight]; 
} 
+1

Creo que quería decir 'return [self.tableView sectionHeaderHeight];', o mejor aún, 'return [tableView sectionHeaderHeight];'. Sin embargo, ambos devuelven -1 por mí, tal vez porque no estoy usando una punta o guión gráfico. – jk7

2

No estoy seguro de cuál es la respuesta correcta es que aquí, pero ni aparece 10 o 22 para ser el altura correcta para una vista de tabla agrupada en iOS 5. Estoy usando 44, basado en la pregunta this, y al menos parece tener aproximadamente la altura correcta.

5

En aras de la exhaustividad: en iOS7 + la altura de encabezados de sección de estilo agrupadas es 55.5 para la primera y para 38 siguiente cabeceras. (medido con DCIntrospect)

2

Para obtener la altura por defecto, simplemente dejar super manejarlo:

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

    return [super tableView:tableView heightForHeaderInSection:section]; 
} 
+0

'[super tableView: tableView heightForHeaderInSection: section];' devuelve 0 para mí, quizás porque no estoy usando una punta o guión gráfico. – jk7

+0

Esto solo funciona si está subclasificando UITableViewController. – Wallace

Cuestiones relacionadas