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

Zügel
quelle
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;
}
Ajaxharg
quelle
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.

paulthenerd
quelle
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];
}
BadPirate
quelle
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)

Ronhippler
quelle
4

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

Muvimotv
quelle
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.

Jason George
quelle
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];
}
Hendrik
quelle
[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];
}
Yogesh D.
quelle
Ich denke du meinstreturn [self sectionHeaderHeight];
TMB
@TMB [self sectionHeaderHeight];erzeugt einen Fehler. Meinten Sie [tableView sectionHeaderHeight];?
jk7