2009-06-03 4 views
5

Pour un iPhone, j'ai un UITableView qui est groupé, a une section et dans lequel j'ai configuré un en-tête de section qui est un objet UILabel de la plume. Lorsque l'affichage de la table s'affiche, l'en-tête apparaît sous la forme d'une bande de noir uni - pas de texte. HeightForHeaderInSection J'ai défini la hauteur comme frameSize.height de l'objet UILabel.L'en-tête de la section UITableView est entièrement noir

Lorsque je change la hauteur dans IB, la hauteur de la bande noire change. Donc je sais que le fichier .m s'est accroché à l'objet UILabel droit.

Dans le débogueur, dans viewForHeaderInSection, il semble que la largeur de l'objet UILabel est zéro et la hauteur est 1079574528 et le texte est null.

Des pensées sur ce que je fais mal?

Répondre

0

Pouvez-vous poster le code pour votre heightForHeaderInSection et vos viewForHeaderInSection fonctions? La théorie derrière ce que vous faites semble correcte, mais sans voir le code, il serait presque impossible de comprendre le problème ...

Il semble que vous placiez une étiquette sur la vue dans IB et essayiez de utilisez cela comme vue d'en-tête - ce qui n'est pas la bonne façon de faire les choses. Si vous n'utilisez pas viewForHeaderInSection, puis donner que l'essayer .. comme ceci:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    UILabel *lbl; 
    lbl.text = @"Header for The Only Section"; 
    //define other properties for the label - font, shadow, highlight, etc... 

    return lbl; 
} 
+2

Cela ne fonctionnera pas, car vous n'avez pas initialisé l'étiquette. Vous avez besoin de [[UILabel alloc] initWithFrame: someFrame] '. Ensuite, vous pouvez définir sa propriété 'text'. –

25

Je ne sais pas ce que vous faites mal, mais voici quelques exemples de code qui pourrait aider (d'un post sur mon blog):

#define SectionHeaderHeight 40 


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    if ([self tableView:tableView titleForHeaderInSection:section] != nil) { 
     return SectionHeaderHeight; 
    } 
    else { 
     // If no section header title, no section header needed 
     return 0; 
    } 
} 


- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section]; 
    if (sectionTitle == nil) { 
     return nil; 
    } 

    // Create label with section title 
    UILabel *label = [[[UILabel alloc] init] autorelease]; 
    label.frame = CGRectMake(20, 6, 300, 30); 
    label.backgroundColor = [UIColor clearColor]; 
    label.textColor = [UIColor colorWithHue:(136.0/360.0) // Slightly bluish green 
           saturation:1.0 
           brightness:0.60 
             alpha:1.0]; 
    label.shadowColor = [UIColor whiteColor]; 
    label.shadowOffset = CGSizeMake(0.0, 1.0); 
    label.font = [UIFont boldSystemFontOfSize:16]; 
    label.text = sectionTitle; 

    // Create header view and add label as a subview 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, SectionHeaderHeight)]; 
    [view autorelease]; 
    [view addSubview:label]; 

    return view; 
} 
+0

J'ai le problème de "barre noire" mais SEULEMENT en passant en mode paysage et il ne fixe pas en revenant au portrait. La seule façon que j'ai trouvée jusqu'à présent pour "réparer" c'est en appelant reloadData sur la tableview mais c'est une méthode TRÈS lourde à appeler pour réparer quelque chose ... – kdbdallas

+1

mots ne peuvent pas exprimer combien de temps votre code m'a sauvé:) **Je vous remercie!!!! –

1

J'ai eu le même problème et n'a pas vraiment compris pourquoi la barre noire ..

MAIS, au lieu de fournir les vues d'en-tête et pied de page dans les méthodes de délégué, si je mis val ues pour tableView.tableHeaderView et tableView.tableFooterView, c'est très bien!

+0

A travaillé pour moi. Mon en-tête était transparent et au-dessus des rangées. – casey

0

3.1.3 n'aime pas [UIColor clearColor]; essayez d'utiliser la même couleur d'arrière-plan que votre tableview

0

J'ai observé le même comportement lors de l'actualisation après le chargement de la source de données. J'ai remarqué que c'était en raison de la façon dont j'étais rafraîchissante vue sur la table.

//[self loadView]; this caused the section header to go black. 
[self.tableView reloadData]; // this works!