Riduzione dello spazio tra le sezioni di UITableView


141

C'è un modo per ridurre lo spazio tra due sezioni di un UITableView? Ci sono circa 15 pixel tra ogni singola sezione che ho. Ho già provato a restituire 0 per -tableView:heightForFooterInSection:e -tableView:heightForHeaderInSection:ma questo non cambia nulla.

Eventuali suggerimenti?


1
Stavo usando una tabella raggruppata e impostando l'altezza dell'intestazione / piè di pagina su 0.0. Ma mostrava un'area grigia con un'altezza (predefinita) di 30 punti. L'uso 0.0non è accettato. è necessario utilizzare qualsiasi valore sopra 0.0ad es 0.0001.
Miele

Come dice @Honey 0.0non funziona. Ho una risposta più approfondita per lo stesso problema qui: stackoverflow.com/a/22185534/2789144
James Nelson,

Risposte:


263

È stato un po 'complicato, ma prova questo codice:

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

Modificare i valori di conseguenza. Per rimuovere lo spazio, penso che 0.0 non sarà accettato. Il valore minimo più piccolo sembra essere 1.0.


2
Dovresti restituire 5.0f invece di 5.0, a causa di conflitti a doppio float
LeonS

45
Puoi anche restituire 0,00001f come altezza e otterrai un'altezza di 0 pixel / punti.
Klaas,

1
Come sottolinea @Klass, non puoi usare 0l'altezza: otterrai l'altezza predefinita.
zekel,

26
Perché non usare CGFLOAT_MIN? È fatto per questo tipo di scenari :)
Andrei Filip,

12
Se si utilizza swift, è possibile restituireCGFloat.leastNonzeroMagnitude
oztune

140

Per tutti coloro che vogliono ridurre la distanza a 0 devi usare:

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

Perché la pubblicazione di UITableViewDelegate produce solo effetti a partire da float maggiori di zero.

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

(utilizzando iOS 4.1 con XCode 4.0.2)


7
ritorno 0.0001; sta lavorando per me. Sto usando xcode 4.6 e iOS 6.1
Sam

Devo solo restituire CGFLOAT_MIN nei primi due metodi e funziona benissimo.
Giulio

anziché 0 utilizzarereturn .leastNormalMagnitude
stan

33

Puoi effettivamente impostare le altezze piè di pagina / intestazione / cella in Interface Builder nella scheda dimensioni. Per impostazione predefinita, l'intestazione / piè di pagina sono impostati su 10.0.


Penso che tale comportamento sia stato aggiunto in iOS 5.0 o iOS 6.0, ma sì - ora è molto più facile impostare la distanza tra i gruppi.
Vlas Voloshin,

2
So che questo è vecchio ma volevo commentare che a partire da XCode 5 e iOS 7, sembra che questo debba essere fatto in codice. L'ho impostato nel generatore di interfaccia su 0 ed era ancora impostato su 1 fino a quando non l'ho impostato nel codice su 0.
Ahmad

Con Xcode 6 e iOS 8 sembra funzionare solo con la configurazione nello storyboard.
Murray Sagal,

sono impostati su 18 su xcode 7 per impostazione predefinita. ma questa è di gran lunga la soluzione più semplice!
static0886,

27

Devi ridurre l'altezza dell'intestazione / piè di pagina della sezione. Quindi lo spazio tra le sezioni sarà ridotto.

prova questo codice

Per me funziona :-)

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

21

Puoi anche ridurre l'altezza del piè di pagina e dell'intestazione della sezione dallo storyboard. Nella vista tabella -> ispettore dimensioni. Vai a Altezza sezione.

Ispettore dimensioni per UITableView nello storyboard.

Per impostazione predefinita, è impostato su 22 per la tabella di stile normale e su 10 per la tabella di stile raggruppata. È possibile configurare i valori aumentando / diminuendo i valori per intestazione e piè di pagina separatamente.


6

Per me il problema era perché stavo usando uno stile di visualizzazione tabella raggruppata ( UITableViewStyleGrouped). Quando l'ho cambiato in uno stile semplice ( UITableViewStylePlain) il mio tableView:heightForHeaderInSection:metodo era l'unica cosa che determinava la dimensione di ciascuna intestazione di sezione.


4

Usa questo forse, 0 non funzionerà come previsto

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

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

3

AGGIORNAMENTO PER iOS7: A causa dell'aggiornamento del rilascio automatico di ARC, ecco il codice di @Martin Stolz modificato.

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

(Utilizzando iOS7, Xcode v5.0)


0

Per me solo questo problema è stato risolto semplicemente usando il seguente codice,

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

Restituire 1 per la prima sezione ha risolto il problema.


0

Per modificare lo spazio dell'intestazione / piè di pagina è necessario implementare i seguenti metodi :

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

E

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

(utilizzare i metodi corrispondenti per modificare l'altezza del piè di pagina)

Il codice seguente rimuove completamente gli spazi attorno alle sezioni:

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