Domanda

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{

 if(section != 0) {

  UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(10, 10, 100, 30)] autorelease];
  view.backgroundColor = [UIColor redColor];

  return view;

 } else {
  return tableView.tableHeaderView;
 }

}

Questa è la mia implementazione di viewForHeaderInSection ma qualunque telaio mi rendono sempre mi mostra la stessa cornice rossa. Vede qualche problema con il mio codice?

Immagine:

entrare descrizione dell'immagine qui

UPDATE:

Mhm ora il mio blocco rosso è più alto, ma il mio primo tableHeader è ora in qualche modo nascosto. Il primo è stato realizzato con il titleForHeaderInSection. Pensavo solo a implementare l'altezza dell'altezza tableHeader ma quello non funziona

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if(section == 1)
    return 30;
else
    return tableView.tableHeaderView.frame.size.height;
}
È stato utile?

Soluzione

È necessario implementare questo metodo delegato

    - (CGFloat)tableView:(UITableView *)tableView
heightForHeaderInSection:(NSInteger)section;

Nel tuo caso, si può semplicemente return 30;.


Inoltre, si sono perdite view!

Il tuo [view release] succede dopo l'return. Ma non appena il return accade il metodo di esecuzione viene interrotta e il vostro release non viene mai chiamato.

Quindi, si desidera che questo posto

UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(10, 10, 100, 30)] autorelease];

E sbarazzarsi del release esplicita in basso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top