Wie ändere ich die Höhe des gruppierten UITableView-Headers?

86

Ich weiß, wie man die Höhe der Abschnittsüberschriften in der Tabellenansicht ändert. Ich kann jedoch keine Lösung finden, um den Standardabstand vor dem ersten Abschnitt zu ändern.

Im Moment habe ich diesen Code:

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

Geben Sie hier die Bildbeschreibung ein

Circuitlego
quelle
1
stackoverflow.com/questions/5441938/… Siehe diesen Link ...
Jitendra
@ JitendraDeore Danke, dass Sie mich in die richtige Richtung geführt haben
Circuitlego

Antworten:

215

Geben Sie CGFLOAT_MINanstelle von 0 für die gewünschte Abschnittshöhe zurück.

Wenn Sie 0 zurückgeben, verwendet UITableView einen Standardwert. Dies ist ein undokumentiertes Verhalten. Wenn Sie eine sehr kleine Zahl zurückgeben, erhalten Sie effektiv einen Header mit der Höhe Null.

Swift 3:

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

Schnell:

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return CGFloat.min
    }
    return tableView.sectionHeaderHeight
}

Obj-C:

    - (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return CGFLOAT_MIN;
    return tableView.sectionHeaderHeight;
}
Mark Krenek
quelle
8
In Swift ist 'CGFLOAT_MIN' nicht verfügbar: Verwenden Sie stattdessen CGFloat.min.
Tunaobun
4
CGFloat.min verursachte einen Absturz, weil CGFloat.min einen negativen Wert wie -0.0000000000001
Pavel Gatilov
2
Vielleicht ist dies Pedanterie, aber CGFloat.min ist keine sehr kleine Zahl, es ist eine sehr große negative Zahl. Wenn Sie eine sehr kleine Anzahl möchten, würden Sie epsilon verwenden.
Alex Bird
6
In Swift 3 ist esCGFloat.leastNormalMagnitude
ixany
1
Hinweis: Verwenden Sie diesen Wert nicht estimatedHeightForHeaderInSection, da die App abstürzt.
Pedro Paulo Amorim
27

Wenn Sie einen gruppiertentableView Stil verwenden , legen Sie automatisch die oberen und unteren Einfügungen fest. Verwenden Sie Delegierungsmethoden für Kopf- und Fußzeilen, um sie zu vermeiden und die Einstellung interner Einfügungen zu vermeiden. Geben Sie niemals 0.0 zurück, aber .tableViewCGFLOAT_MIN

Ziel c

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

Schnell

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}
Jakub Truhlář
quelle
Ich zusätzlich musste Fehlanzeige für viewForHeaderInSectiondie Header vollständig zu verschwinden.
Dominik Seemayr
19

Es scheint, dass ich keine Tabellenkopfansicht mit einer Höhe von 0 festlegen kann. Am Ende habe ich Folgendes getan:

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}
Circuitlego
quelle
Dies wäre besser, um die Höhe hier - (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
einzustellen
17

Das hat bei mir mit Swift 4 funktioniert . Ändern Sie Ihr UITableViewzB in viewDidLoad:

// Remove space between sections.
tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

// Remove space at top and bottom of tableView.
tableView.tableHeaderView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))
tableView.tableFooterView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))
FBente
quelle
13

Sie können dies versuchen:

In dem loadView

_tableView.sectionHeaderHeight = 0;

Dann

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

Es sollte entfernt werden, solange Sie keine Objekte in der Kopfzeile haben ...

Und wenn Sie eine gewisse Größe des Abschnittskopfes wünschen, ändern Sie nur den Rückgabewert.

Gleiches gilt, wenn die Abschnittsfußzeile nicht entfernt wird.

_tableView.sectionFooterHeight = 0;

und

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

Nun, das funktioniert bei meinen Problemen mit der Tabellenansicht in iOS7.

Odd-Arne Dahle
quelle
3

Sie sollten den Code self.tableView.tableHeaderView = [UIView new];nach dem Hinzufügen entfernen

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return CGFLOAT_MIN;
}
Chris Yim
quelle
Es ist die footerHöhe, die in meinem Fall Probleme verursacht. Danke für die Hilfe.
pkc456
2

Sie können viewForHeaderInSectioneine Ansicht mit beliebiger Höhe verwenden und zurückgeben.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{

    int height = 30 //you can change the height 
    if(section==0)
    {
       UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, height)];

       return view;
    }
}
Divyam Shukla
quelle
Ich frage nicht nach Abschnittsüberschriften, sondern nach der Tabellenüberschrift.
Circuitlego
Anschließend können Sie A uiview direkt an die Tabellenkopfansicht übergeben.
Divyam Shukla
2

In schnell 2.0

func tableView(tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {

        return yourHeight
    }
George Asda
quelle
2

In Swift 4

Entfernen Sie die zusätzliche obere Polsterung in der gruppierten Tabellenansicht.

Hier wird die Höhe 1 als minimale Höhe für die Abschnittsüberschrift angegeben, da Sie nicht 0 angeben können, da die Tabellenansicht den standardmäßigen oberen Rand verwendet, wenn die Höhe Null zugewiesen wird.

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

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return UIView()
}
Jaiswal Rajan
quelle
0

Beispiel für viewForHeaderInSection:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 118)];
view.backgroundColor = COLOR_DEFAULT;

NSString* key = [self.tableKeys objectAtIndex:section];
NSArray *result = (NSArray*)[self.filteredTableData objectForKey:key];
SZTicketsResult *ticketResult = [result objectAtIndex:0];

UIView *smallColoredView = [[UIView alloc] initWithFrame:CGRectMake(0, 5, 320, 3)];
smallColoredView.backgroundColor = COLOR_DEFAULT_KOSTKY;
[view addSubview:smallColoredView];

UIView *topBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 8, 320, 40)];
topBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:topBackgroundView];

UILabel *totalWinnings = [[UILabel alloc] initWithFrame:CGRectMake(10, 8, 300, 40)];
totalWinnings.text = ticketResult.message;
totalWinnings.minimumFontSize = 10.0f;
totalWinnings.numberOfLines = 0;
totalWinnings.backgroundColor = [UIColor clearColor];
totalWinnings.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:totalWinnings];

UIView *bottomBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 55, 320, 58)];
bottomBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:bottomBackgroundView];

UILabel *numberOfDraw = [[UILabel alloc] initWithFrame:CGRectMake(10, 55, 290, 58)];
numberOfDraw.text = [NSString stringWithFormat:@"sometext %@",[ticketResult.title lowercaseString]];;
numberOfDraw.minimumFontSize = 10.0f;
numberOfDraw.numberOfLines = 0;
numberOfDraw.backgroundColor = [UIColor clearColor];
numberOfDraw.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:numberOfDraw];

return view;
Jaspis
quelle