2010-08-06 15 views
9

ogni volta che ho impostato la mia tableHeaderView non sto vedendo nel simulatore. Se aggiungo come una visualizzazione secondaria, esso finisce per essere disegnato sotto l'intestazione di sezione. Qualche idea di cosa mi manchi qui?tableView.tableHeaderView stato impostato ma non disegnato

io ho un file XIB. Tuttavia non ho visto nessuna proprietà in IB per influenzare headerViews.

- (void)viewDidLoad { 
[super viewDidLoad]; 
MyTitleView *titleView = [[MyTitleView alloc] initWithFrame:CGRectMake(60,0,260,40)]; 
titleView.label.text = @"My Title"; 
self.navigationItem.titleView = titleView; 
[titleView release]; 

StandardTableHeaderView *headerView = [[StandardTableHeaderView alloc] initWithFrame:CGRectMake(0,0,320,44)]; 
self.tableView.tableHeaderView = headerView; 
// [self.view addSubview:self.tableView.tableHeaderView]; 
// [headerView release]; 


NSLog(@"Header: %@",self.tableView.tableHeaderView); //Logs ] Header:  <StandardTableHeaderView: 0x5a508b0; frame = (0 0; 320 44); layer = <CALayer: 0x5a51130>> 

Edit: metodo init StandardTableHeaderView.m:

- (id)initWithFrame:(CGRect)frame { 
if ((self = [super initWithFrame:frame])) { 
    self.backgroundColor = [UIColor redColor]; 
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(frame.origin.x,0,frame.size.width,frame.size.height)]; 
    self.label.backgroundColor = [UIColor clearColor]; 
    self.label.textColor = [UIColor whiteColor]; 
    self.label.font = [UIFont fontWithName:@"Helvetica" size:16]; 
    [self addSubview:self.label]; 
} 
return self; 
} 

risposta

7

Prima di tutto il codice sia bene.

2 possibili problemi:

  • self.tableView non è impostato
  • tableHeaderView viene sostituita dopo viewDidLoad
+0

mio tableView è impostato - le cellule funzionano bene e il registro mostra il bel telaio tableHeaderView.Non sto cambiando tableHeaderView in nessun'altra parte ... forse qualche stranezza e dovrei copiare in un nuovo progetto? – quantumpotato

+0

Per ora proverò a ridimensionare la vista tabella e ad aggiungere Vista intestazione come vista separata. – quantumpotato

+1

Come hai controllato che la proprietà tableView sia impostata (non nulla)? Il fatto che le celle siano disegnate non significa necessariamente che la proprietà tableView non sia nulla ... prova ad aggiungere 'NSLog (@" self.tableView =% @, self.tableView.tableHeaderView =% @ ", self.tableView , self.tableView.tableHeaderView); 'subito dopo' selfView.tableHeaderView = headerView; 'all'interno di' viewDidLoad' e vedi cosa ottieni nel log ... –

5

ho avuto lo stesso problema e ho notato che ogni tableViewHeader che ho definito nel mio NIB sarebbe non appare se inizializzato mia Tableview invocando:

- (id)initWithStyle:(UITableViewStyle)style 

Ma è magicamente apparso senza sforzo quando ho inizializzato mia Tableview utilizzando:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 

Strano.

+0

Quando si utilizza initWithNibName :, allora tutte le informazioni NIB (come tableHeaderView) verranno caricate dalla NIB specificata. Questo è probabilmente il motivo per cui è "magicamente apparso" :) –

4

Nota! Se ti aspetti che la vista tabella per impostare la cornice della vista dell'intestazione per te ti sbagli e otterrà risultati molto strani.

Ho avuto il mio impostato su CGRectZero pensando che si sarebbe risolto da solo, ma la cosa non sarebbe apparsa e quando lo ha fatto, sembrerebbe infilata sotto la barra di navigazione o attaccata alla prima cella e così via.

-7

provare a impostare UITableViewDelegate nell'intestazione e inserire il seguente codice nel file .m.

#pragma mark UITableViewDelegate 
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    return 44.0f; 
} 

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    StandardTableHeaderView *headerView = [[StandardTableHeaderView alloc] initWithFrame:CGRectMake(0,0,320,44)]; 

    return headerView; 
} 
+1

Questa è un'intestazione di sezione .. non una vista di intestazione di tabella ... – TheCodingArt

2

ho cercato di mettere il setup di tableHeaderView in ViewDidLoad e loadView metodi - non ha funzionato: parte della vista era bianco, non visibile completamente. Poi ho provato a metterlo a ViewDidAppear e ha funzionato:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self setupTableHeaderView]; 
} 
+0

Questo ha funzionato anche per me ... ma perché? Ho altri progetti Xcode in cui ho impostato la vista dell'intestazione della tabella in '' 'viewDidLoad''' e tutto ha funzionato bene .... hmmm. Bene, grazie comunque :) – Supertecnoboff

0

Ho avuto un problema in cui stavo mettendo una vista all'interno di un tableviewcontroller come intestazione e non avrebbe mostrato quando ho fatto funzionare l'applicazione, il problema era Ho aggiunto l'intestazione quando non c'erano celle prototipo. se aggiungi almeno una cella prototipo, quindi aggiungi l'intestazione sopra di essa, quindi elimina la cella (se necessario), la registra come headerview correttamente

0

quando si visualizza UIView all'interno dello storyboard e si prova a imposta tableView.tableHeaderView = YOUR_VIEW, non funzionerà. Bisogna prima di trascinamento che vista dall'esterno controller della vista a creare la sua uscita e quindi impostare

tableView.tableHeaderView = YOUR_VIEW

Problemi correlati