Come modificare l'altezza dell'intestazione UITableView raggruppata?


88

So come modificare l'altezza delle intestazioni di sezione nella vista tabella. Ma non riesco a trovare alcuna soluzione per modificare la spaziatura predefinita prima della prima sezione.

In questo momento ho questo codice:

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

inserisci qui la descrizione dell'immagine



@JitendraDeore Grazie per avermi guidato nella giusta direzione
circuitlego

Risposte:


219

Restituisci CGFLOAT_MINinvece di 0 per l'altezza della sezione desiderata.

La restituzione di 0 fa sì che UITableView utilizzi un valore predefinito. Questo è un comportamento non documentato. Se restituisci un numero molto piccolo, ottieni effettivamente un'intestazione di altezza zero.

Swift 3:

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

Swift:

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

8
In Swift, "CGFLOAT_MIN" non è disponibile: utilizza invece CGFloat.min.
tounaobun

4
CGFloat.min ha causato un arresto anomalo, perché CGFloat.min restituisce un valore negativo come -0.0000000000001
Pavel Gatilov

2
Forse questa è pedanteria, ma CGFloat.min non è un numero molto piccolo, è un numero negativo molto grande. Se volessi un numero molto piccolo, useresti epsilon.
alex bird

6
In Swift 3 èCGFloat.leastNormalMagnitude
ixany

1
Consiglio: non utilizzare questo valore su estimatedHeightForHeaderInSection, l'app andrà in crash.
Pedro Paulo Amorim

27

Se utilizzi lo tableViewstile raggruppato , tableViewimposta automaticamente gli inserti in alto e in basso. Per evitarli ed evitare l'impostazione di inserti interni, utilizzare metodi delegati per intestazione e piè di pagina. Non restituire mai 0,0 maCGFLOAT_MIN .

Obiettivo-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;
}

Swift

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
}

Ho inoltre dovuto restituire nil per viewForHeaderInSectionper l'intestazione a completamente scomparire.
Dominik Seemayr

19

Sembra che non sia possibile impostare una visualizzazione dell'intestazione della tabella con altezza 0. Ho finito per fare quanto segue:

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}

Sarebbe meglio impostare l'altezza qui:- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
uniruddh

19

Questo ha funzionato per me con Swift 4 . Modifica il tuo UITableVieweg 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)))

1
Lifesaver, grazie per aver
dedicato

13

Puoi provare questo:

Nel loadView

_tableView.sectionHeaderHeight = 0;

Poi

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

Dovrebbe essere rimosso fintanto che non ci sono oggetti nell'intestazione ...

E se desideri una certa dimensione dell'intestazione della sezione, modifica solo il valore restituito.

lo stesso se non si rimuove la sezione piedi.

_tableView.sectionFooterHeight = 0;

e

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

Bene, questo funziona per i miei problemi con la tableview in iOS7.


3

È necessario rimuovere il codice self.tableView.tableHeaderView = [UIView new];dopo aver aggiunto

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

È l' footeraltezza che sta causando problemi nel mio caso. Grazie per l'aiuto.
pkc456

2

puoi usare viewForHeaderInSectione restituire una vista con qualsiasi altezza.

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

Non sto chiedendo le intestazioni di sezione, ma l'intestazione della tabella.
circuitlego

quindi puoi passare direttamente A uiview alla vista dell'intestazione della tabella.
Divyam shukla

2

In swift 2.0

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

        return yourHeight
    }

2

In Swift 4

Rimuovere il riempimento superiore in eccesso nella vista tabella raggruppata.

Qui l'altezza è data 1 come altezza minima per l'intestazione della sezione perché non puoi dare 0 poiché tableview prenderà il margine superiore predefinito se viene assegnata un'altezza zero.

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

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

0

Esempio di 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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.