Standardhöhe für den Abschnittskopf in UITableView


125

Ich möchte die Höhe des ersten Headers in meiner UITableView festlegen. Für die anderen Header möchte ich, dass sie die Standardhöhe bleiben. Welchen Wert / welche Konstante kann ich im folgenden Code anstelle von "someDefaultHeight" setzen?

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

    return someDefaultHeight;
}

Vielen Dank


Warum probierst du nicht verschiedene Werte aus, bis du einen bekommst, mit dem du zufrieden bist?
Daniel

4
@Daniel - Wenn Apple jemals beschließt, den Standardwert für die Zeilenhöhe zu ändern, muss ich sicherstellen, dass meine App diesen Wert nicht fest codiert (auf einen beliebigen Betrag). Es ist am besten, diese Informationen aus einer Konstante zu ziehen, wenn sie irgendwo deklariert sind.
Rein

Antworten:


204

Ab IOS 5.0 können Sie UITableViewAutomaticDimension in den meisten Delegatmethoden zurückgeben. Es befindet sich am Ende der Dokumentationsseite

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

1
hmm .. Was mich betrifft , UITableViewAutomaticDimensionkehrt ich zurück -1(fest codierte Konstante) und ich sehe überhaupt keine Abschnitte in meinem UITableView.
Skywinder

warum UITableViewAutomaticDimensionzeigt -1 wenn NSLoges?
S1U

30
Dies funktioniert nur, wenn Sie Folgendes verwenden: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionWenn Sie die - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionMethode implementieren , funktioniert dies nicht.
SuperSaiyen

2
Es ist erwähnenswert, dass diese Methode und die Schätzungsdelegatenmethode UITableViewAutomaticDimensioneine Höhe von Null haben , wenn Sie sie implementieren und zurückgeben .
Sam Soffes

4
@ SuperSaiyen - Es funktioniert mit viewForHeaderInSectionIhnen müssen nur einstellenestimatedSectionHeaderHeight
Robert

48

Nach Überprüfung der Standardeinstellungen in meiner App sieht es so aus, als ob für eine gruppierte Tabelle die Standardeinstellung 22 und für eine nicht gruppierte Tabelle die Standardeinstellung 10 ist.

Wenn Sie den Wert der Eigenschaft sectionHeaderHeight in Ihrer Tabellenansicht überprüfen, sollte dies angegeben werden.


1
Danke ... ich werde es hart codieren. Obwohl ich mir wünschte, es gäbe eine Konstante für diesen Wert.
Rein

3
Sie haben diese rückwärts. UITableViewStyleGroupedist 22 und UITableViewStylePlainist 10.
Michael Grinich

25

Eigentlich den Trick machen :)

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

2
Ich denke du meintest return [self.tableView sectionHeaderHeight];oder noch besser return [tableView sectionHeaderHeight];. Beide geben jedoch -1 für mich zurück, möglicherweise weil ich keine Feder oder kein Storyboard verwende.
jk7

7

Der Vollständigkeit halber: In iOS7 + gilt die Höhe für gruppierte Abschnittsüberschriften 55.5für die erste und 38für die folgenden Überschriften. (gemessen mit DCIntrospect)


4

Für Swift 4.2 sollten Sie UITableView.automaticDimension zurückgeben


2

Ich bin mir nicht sicher, wie die richtige Antwort hier lautet, aber weder 10 noch 22 scheinen die richtige Höhe für eine gruppierte Tabellenansicht in iOS 5 zu sein. Ich verwende 44, basierend auf dieser Frage, und es scheint zumindest grob zu sein die richtige Höhe.


2

Um die Standardhöhe zu erhalten, lassen Sie superes einfach handhaben:

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

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

[super tableView:tableView heightForHeaderInSection:section];Gibt für mich 0 zurück, vielleicht weil ich keine Feder oder kein Storyboard verwende.
jk7

1
Dies funktioniert nur, wenn Sie UITableViewController unterklassifizieren.
Wallace

-1

Dies sollte den Trick tun

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

Ich denke du meinstreturn [self sectionHeaderHeight];
TMB

@TMB [self sectionHeaderHeight];erzeugt einen Fehler. Meinten Sie [tableView sectionHeaderHeight];?
jk7
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.