Altezza predefinita per l'intestazione di sezione in UITableView


125

Voglio impostare l'altezza della prima intestazione nel mio UITableView. Per le altre intestazioni voglio che rimangano l'altezza predefinita. Quale valore / costante posso inserire al posto di "someDefaultHeight" nel codice qui sotto?

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return someDefaultHeight;
}

Grazie


perché non provi valori diversi fino a quando non diventi felice?
Daniel,

4
@Daniel: se Apple decide di modificare il valore di altezza della riga predefinito, devo assicurarmi che la mia app non codifichi questo valore (in modo arbitrario). È meglio estrarre queste informazioni da una costante se vengono dichiarate da qualche parte.
rein

Risposte:


204

Da IOS 5.0 in poi è possibile restituire UITableViewAutomaticDimension nella maggior parte dei metodi delegati. Si trova in fondo alla pagina della documentazione

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return UITableViewAutomaticDimension;
}

1
hmm .. Quanto a me UITableViewAutomaticDimensionritorna -1(const hardcoded) e non vedo nessuna sezione nel mio UITableView.
skywinder,

perché UITableViewAutomaticDimensionmostra -1 quando NSLog?
S1U,

30
Funziona solo quando usi l'area: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionse stai implementando il - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionmetodo, questo non funziona.
SuperSaiyen,

2
Vale la pena notare che se si implementa questo e il metodo delegato di stima e si restituisce UITableViewAutomaticDimensionavrà un'altezza zero.
Sam Soffes,

4
@SuperSaiyen - Funziona viewForHeaderInSectionsolo con te, basta impostareestimatedSectionHeaderHeight
Robert,

48

Dal controllo delle impostazioni predefinite nella mia app sembra che per una tabella raggruppata il valore predefinito sia un'altezza di 22 e per una tabella non raggruppata il valore predefinito è un'altezza di 10.

Se controlli il valore della sezione propertyHeaderHeight sul tuo tableview che dovrebbe dirti.


1
Grazie ... lo codificherò per questo. Anche se vorrei che ci fosse una costante per questo valore.
Rein

3
Hai questi all'indietro. UITableViewStyleGroupedha 22 anni ed UITableViewStylePlainè 10.
Michael Grinich,

25

In realtà fai il trucco :)

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return kFirstSectionHeaderHeight;
    return [self sectionHeaderHeight];
}

2
Credo che si intende return [self.tableView sectionHeaderHeight];, o meglio ancora, return [tableView sectionHeaderHeight];. Tuttavia, entrambi restituiscono -1 per me, forse perché non sto usando un pennino o uno storyboard.
jk7,

7

Per completezza: in iOS7 + l'altezza per le intestazioni di sezione di stile raggruppate è 55.5per la prima e 38per le seguenti intestazioni. (misurato con DCIntrospect)


4

Per swift 4.2 è necessario restituire UITableView.automaticDimension


2

Non sono sicuro di quale sia la risposta corretta qui, ma né 10 né 22 sembrano essere l'altezza corretta per una vista di tabella raggruppata in iOS 5. Sto usando 44, basato su questa domanda, e almeno sembra approssimativamente l'altezza corretta.


2

Per ottenere l'altezza predefinita, basta supergestirla:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return [super tableView:tableView heightForHeaderInSection:section];
}

[super tableView:tableView heightForHeaderInSection:section];restituisce 0 per me, forse perché non sto usando un pennino o uno storyboard.
jk7,

1
Funziona solo se stai eseguendo la sottoclasse di UITableViewController.
Wallace,

-1

Questo dovrebbe fare il trucco

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return [tableView rowHeight];
}

penso che intendireturn [self sectionHeaderHeight];
TMB il

@TMB [self sectionHeaderHeight];produce un errore. Volevi dire [tableView sectionHeaderHeight];?
jk7,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.