Reduzieren des Abstands zwischen Abschnitten der UITableView


141

Gibt es eine Möglichkeit, den Abstand zwischen zwei Abschnitten einer UITableView zu verringern? Zwischen jedem einzelnen Abschnitt, den ich habe, befinden sich ungefähr 15 Pixel. Ich habe schon versucht 0 zurückzukehren für -tableView:heightForFooterInSection:und , -tableView:heightForHeaderInSection:aber das ändert nichts.

Irgendwelche Vorschläge?


1
Ich habe eine gruppierte Tabellenansicht verwendet und die Kopf- / Fußzeilenhöhe auf festgelegt 0.0. Es wurde jedoch ein grauer Bereich mit einer (Standard-) Höhe von 30 Punkten angezeigt. Die Verwendung 0.0wird nicht akzeptiert. Sie müssen einen beliebigen Wert über 0.0z 0.0001.
Honig

Wie @Honey sagt, 0.0funktioniert nicht. Ich habe eine gründlichere Antwort auf das gleiche Problem hier: stackoverflow.com/a/22185534/2789144
James Nelson

Antworten:


263

Es war ein bisschen schwierig, aber versuchen Sie diesen Code:

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

    return 1.0;
}

- (CGFloat)tableView:(UITableView*)tableView 
           heightForFooterInSection:(NSInteger)section {
    return 5.0;
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

Ändern Sie die Werte entsprechend. Um das Leerzeichen zu entfernen, wird 0.0 meiner Meinung nach nicht akzeptiert. Der kleinste vernünftige Wert scheint 1,0 zu sein.


2
Sie sollten 5.0f anstelle von 5.0 wegen Double-Float-Konflikten zurückgeben
LeonS

45
Sie können sogar 0,00001f als Höhe zurückgeben und erhalten eine Höhe von 0 Pixel / Punkten.
Klaas

1
Wie @Klass hervorhebt, können Sie nicht 0als Höhe verwenden - Sie erhalten die Standardhöhe.
Zekel

26
Warum nicht CGFLOAT_MIN verwenden? Es ist für diese Art von Szenarien gemacht :)
Andrei Filip

11
Wenn Sie Swift verwenden, können Sie zurückkehrenCGFloat.leastNonzeroMagnitude
oztune

140

Für alle, die den Abstand auf 0 verkleinern möchten, müssen Sie Folgendes verwenden:

tableView.sectionHeaderHeight = 0.0;
tableView.sectionFooterHeight = 0.0;

Da das Serving von UITableViewDelegate nur ab Floats größer als Null wirkt.

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    return 1.0;
}


-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 1.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

(Verwenden von iOS 4.1 mit XCode 4.0.2)


7
return 0,0001; arbeitet für mich. Ich benutze Xcode 4.6 und iOS 6.1
Sam

Ich muss nur CGFLOAT_MIN in den ersten beiden Methoden zurückgeben und es funktioniert gut.
Julius

anstelle von 0 verwendenreturn .leastNormalMagnitude
Stan

33

Sie können die Höhe von Fußzeile / Kopfzeile / Zelle im Interface Builder auf der Registerkarte Größe festlegen. Standardmäßig sind Kopf- und Fußzeilen auf 10.0 eingestellt.


Ich denke, ein solches Verhalten wurde in iOS 5.0 oder iOS 6.0 hinzugefügt, aber ja - es ist jetzt viel einfacher, die Entfernung zwischen Gruppen einzurichten.
Vlas Voloshin

2
Ich weiß, dass dies alt ist, aber ich wollte kommentieren, dass ab XCode 5 und iOS 7 dies anscheinend im Code erfolgen muss. Ich habe es im Interface Builder auf 0 gesetzt und es wurde immer noch auf 1 gesetzt, bis ich es im Code auf 0 gesetzt habe.
Ahmad

Mit Xcode 6 und iOS 8 scheint es nur mit der Konfiguration im Storyboard zu funktionieren.
Murray Sagal

Sie sind auf xcode 7 standardmäßig auf 18 eingestellt. aber das ist bei weitem die einfachste Lösung!
static0886

27

Sie müssen die Kopf- / Fußzeile des Abschnitts reduzieren. Dann wird der Abstand zwischen den Abschnitten verringert.

Versuchen Sie diesen Code

Für mich geht das :-)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;

21

Sie können auch die Höhe der Fußzeile und der Kopfzeile des Abschnitts im Storyboard verringern. In der Tabellenansicht -> Größeninspektor. Gehen Sie zu Abschnittshöhe.

Größeninspektor für UITableView im Storyboard.

Standardmäßig ist der Wert für die Tabelle mit einfachem Stil auf 22 und für die Tabelle mit gruppiertem Stil auf 10 festgelegt. Sie können Werte konfigurieren, indem Sie die Werte für Kopf- und Fußzeile separat erhöhen / verringern.


6

Für mich war das Problem, weil ich einen gruppierten Tabellenansichtsstil ( UITableViewStyleGrouped) verwendete. Als ich es in einen einfachen Stil ( UITableViewStylePlain) änderte, war meine tableView:heightForHeaderInSection:Methode das einzige, was die Größe der einzelnen Abschnittsüberschriften bestimmte.


4

Verwenden Sie dies möglicherweise, 0 wird nicht wie erwartet funktionieren

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     return .leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

3

UPDATE FÜR iOS7: Aufgrund des ARC-Autorelease-Updates wurde hier der @ Martin Stolz-Code bearbeitet.

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

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 5.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

(Mit iOS7, Xcode v5.0)


0

Für mich wurde nur dieses Problem mit dem folgenden Code behoben:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return section == 0 ? 1 : 20 // 20 is my other sections height
}

Die Rückgabe von 1 für den ersten Abschnitt hat das Problem behoben.


0

Um Kopf- / Fußzeilen Raum ändern sich die folgenden Methoden zu haben , umgesetzt werden:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

UND

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

(Verwenden Sie entsprechende Methoden, um die Fußzeilenhöhe zu ändern.)

Der folgende Code entfernt Leerzeichen um Abschnitte vollständig:

public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}

public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}
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.