web-dev-qa-db-ger.com

Reduzieren Sie den Abstand zwischen Abschnitten der UITableView

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

Irgendwelche Vorschläge?

132
flohei

Es war ein bisschen schwierig, aber probieren 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, denke ich, dass 0.0 nicht akzeptiert wird. Der kleinste gesunde Wert scheint 1,0 zu sein.

255
Tomen

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

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

Weil das Serving von UITableViewDelegate nur einen Effekt ausgehend von Floats größer als Null bewirkt.

-(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];
}

(mit iOS 4.1 mit XCode 4.0.2) 

132
Martin Stolz

Sie können die Höhe der Fußzeile/Kopfzeile/Zelle tatsächlich im Interface Builder auf der Registerkarte Größe festlegen. Die Kopf-/Fußzeile ist standardmäßig auf 10.0 eingestellt.

33
Chris

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;
25
Jirune

Sie können auch die Höhe der Abschnittsfußzeile und -kopfzeile vom Storyboard aus reduzieren. In der Tabellenansicht -> Größeninspektor. Gehen Sie zur Abschnittshöhe.

Size inspector for UITableView in storyboard.

Standardmäßig ist der Wert für Plain Style Table auf 22 und für Grouped Style Table auf 10 festgelegt. Sie können Werte konfigurieren, indem Sie die Werte für Kopf- und Fußzeile getrennt erhöhen/verringern. 

19
iosCurator

Für mich bestand das Problem darin, dass ich einen gruppierten Tabellensichtstil (UITableViewStyleGrouped) verwendete. Als ich sie in einen einfachen Stil (UITableViewStylePlain) änderte, war meine tableView:heightForHeaderInSection:-Methode das einzige, was die Größe jedes Abschnittskopfs festlegte.

4
Liron Yahdav

UPDATE FOR iOS7: Aufgrund eines ARC-Autorelease-Updates wurde hier @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)

3
Chisx

Verwenden Sie dies vielleicht, 0 funktioniert nicht wie erwartet 

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

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

Für mich wurde gerade dieses Problem gelöst, indem der folgende Code verwendet wurde:

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 gelöst.

0
Bharath