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?

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

Zu Männern
quelle
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)

Martin Stolz
quelle
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.

Chris
quelle
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;
Jirune
quelle
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.

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

Liron Yahdav
quelle
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
}
stan
quelle
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)

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

Bharath
quelle
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
}
Murlakatam
quelle