2009-06-03 7 views
5

Per un iPhone, ho un UITableView raggruppato, ha una sezione e in cui ho impostato un'intestazione di sezione che è un oggetto UILabel dal pennino. Quando viene visualizzata la vista tabella, l'intestazione viene visualizzata come una striscia di solido nero, senza testo.L'intestazione della sezione UITableView è tutto nero

In heightForHeaderInSection ho impostato l'altezza come frame.size.height dell'oggetto UILabel. Quando cambio l'altezza in IB, l'altezza della striscia nera cambia. Quindi so che il file .m si è agganciato all'oggetto UILabel giusto.

Nel debugger, in viewForHeaderInSection, sembra che la larghezza dell'oggetto UILabel sia zero e che l'altezza sia 1079574528 e il testo sia null.

Qualche idea su cosa sto facendo male?

risposta

0

potete inserire il codice per la heightForHeaderInSection ei tuoi viewForHeaderInSection funzioni? La teoria dietro quello che stai facendo sembra corretta, ma senza vedere il codice, sarebbe quasi impossibile capire il problema ...

Sembra che tu abbia posto un'etichetta sulla vista in IB e stia provando a usalo come vista dell'intestazione - che non è il modo corretto di fare le cose. Se non si utilizza viewForHeaderInSection, quindi dare una prova che .. come questo:

- (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

Ciò non funzionerà, perché non è stata inizializzata l'etichetta. Hai bisogno di '[[UILabel alloc] initWithFrame: someFrame]'. Quindi, puoi impostare la proprietà 'text'. –

25

Non sei sicuro di quello che stai facendo male, ma qui è un codice di esempio che potrebbe aiutare (da un post su il mio 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

Ho il problema della "barra nera" ma SOLO quando si passa alla modalità orizzontale e non si ripara quando si torna in verticale. L'unico modo che ho trovato finora per "risolvere" è chiamando reloadData sul tableview ma questo è un metodo MOLTO pesante per chiamare per aggiustare qualcosa di questo ... – kdbdallas

+1

le parole non possono esprimere quanto tempo il tuo codice mi ha salvato:) **grazie!!!! –

1

ho avuto lo stesso problema e non hanno ancora capito il motivo per cui la barra nera ..

MA, invece di fornire il punto di vista di intestazione e piè di metodi delegato, se ho impostato val sta per tableView.tableHeaderView e tableView.tableFooterView, va tutto bene!

+0

ha funzionato per me. La mia intestazione era trasparente e in cima alle righe. – casey

0

3.1.3 non piace [UIColor clearColor]; prova ad utilizzare lo stesso colore di sfondo della tua vista tabella

0

Ho osservato lo stesso comportamento durante l'aggiornamento dopo il caricamento dell'origine dati. Ho notato che questo era dovuto al modo in cui stavo aggiornando la vista tabella.

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