2010-03-02 24 views
9

Tengo algo de código muy simple para devolver el título para un encabezado de sección:UITableView titleForHeaderInSection no se muestran correctamente

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    if (section==0) { 
     return @""; 
    } else if (section==1) { 
     return @"Actions"; 
    } else if (section==2) { 
     return @"Attached To"; 
    } 

    return @""; 
} 

Por alguna razón, cuando las cabeceras se muestra realmente en el simulador, la mitad del tiempo que están simplemente la primera letra y luego las elipsis. Desplazarse hacia arriba y hacia abajo (para refrescar la vista del encabezado lo más probable) dará como resultado que el título se muestre correctamente aproximadamente la mitad del tiempo y muestre incorrectamente la otra mitad del tiempo.

¿Alguien tiene alguna idea de lo que podría estar causando esto? Creo que esto es más un desarrollo reciente, pero parece ocurrir en casi todos UITableView s en mi aplicación. No quiero decir que este es un problema de 3.2, pero podría haber comenzado a suceder en ese momento, pero de cualquier manera debe estar relacionado con el código de alguna manera. Gracias.

Respuesta

5

he figura hacia fuera: el problema real con el código regresaba @"". Si devuelve solo una cadena en blanco, en lugar de cero, causará un problema con la visualización de encabezados y pies de página.

En su lugar, debe devolver una cadena nula para que todos los encabezados y pies de página se muestren correctamente. Si devuelve un espacio @" ", seguirá saliendo del espacio vertical para el encabezado, por lo que no es una opción viable. He cambiado todas las instancias de return @""; a simplemente return nil;

1

copio & pasé su código a uno de mis proyectos y funciona sin defectos. (sdk 3.2.1)

¿Quizás el error está en otra parte? ¿Están creando sus propias celdas de tabla? Si es así, ¿está devolviendo la altura adecuada de "tableView: heightForRowAtIndexPath:"? (ese problema me golpeó una vez)

1

Al configurar los títulos de encabezado de sección, tengo más éxito al usar un NSString vacío que se establece en la sección correspondiente, y luego lo libero cuando se completa; además de limitar el uso de las sentencias If() Else() anidadas.

Intento mantenerlo simple y limpio. Por supuesto, para aquellas tablas en las que tengo más de 3 secciones, uso una declaración "Switch" en lugar de las declaraciones If().

Lo bueno de esta función es que se llama tantas veces (número de secciones) que tiene y se ejecutará a través del código cada vez. El NSString *sectionHeader=nil; le da al compilador un valor para ser devuelto, independientemente de lo que esté incrustado en sus sentencias If(). De lo contrario, recibirá advertencias porque el compilador no busca dentro de las declaraciones If() el valor de retorno.

También puede inicializar la cadena a un valor "predeterminado", p. Ej. NSString *sectionHeader = @"Default Header Title";. Si no se cumple ninguna de las sentencias If(), el valor del encabezado predeterminado asignado seguirá siendo el mismo en toda la función y, por lo tanto, se devolverá como sectionHeader para el título.

Estructura básica continuación:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 

//TEMP SECTION STRING HOLDER: 
NSString *sectionHeader = nil; 


//SET TITLE FOR EACH SECTION: 
if(section == 0) { 
    sectionHeader = @"Section Header No. 1"; 
} 

if(section == 1) { 
    sectionHeader = @"Section Header No. 2"; 
} 

if(section == 2) { 
    sectionHeader = @"Section Header No. 3"; 
} 


//RETURN THE SECTION HEADER FOR EACH SECTION: 
return sectionHeader; 

} 
Cuestiones relacionadas