144 votes

Réduction de l'espace entre les sections de l'UITableView

Existe-t-il un moyen de réduire l'espace entre deux sections d'une UITableView ? Il y a environ 15 pixels entre chacune de mes sections. J'ai déjà essayé de renvoyer 0 pour -tableView:heightForFooterInSection: y -tableView:heightForHeaderInSection: mais ça ne change rien.

Des suggestions ?

1 votes

J'utilisais un groupé tableView et en fixant la hauteur de l'en-tête et du pied de page à 0.0 . Mais il affichait une zone grise d'une hauteur de 30 points (par défaut). En utilisant 0.0 n'est pas acceptée. Vous devez utiliser toute valeur supérieure à 0.0 par exemple 0.0001 .

0 votes

Comme le dit @Honey 0.0 ne fonctionne pas. J'ai une réponse plus complète pour le même problème ici : stackoverflow.com/a/22185534/2789144

269voto

Tomen Points 2391

C'était un peu délicat, mais essayez ce 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];
}

Modifiez les valeurs en conséquence. Pour supprimer l'espace, je pense que 0.0 ne sera pas accepté. La plus petite valeur sensée semble être 1.0.

2 votes

Vous devriez retourner 5.0f au lieu de 5.0, à cause des conflits double - float.

45 votes

Vous pouvez même renvoyer 0,00001f comme hauteur et vous obtiendrez une hauteur de 0 pixel/point.

1 votes

Comme le souligne @Klass, vous ne pouvez pas utiliser 0 comme hauteur - vous obtiendrez la hauteur par défaut.

142voto

Martin Stolz Points 1425

Pour tous ceux qui veulent réduire la distance à 0, il faut utiliser :

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

Parce que le service de l'UITableViewDelegate n'a d'effet qu'à partir de flottants supérieurs à zéro.

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

(utilisant iOS 4.1 avec XCode 4.0.2)

7 votes

Return 0.0001 ; fonctionne pour moi. J'utilise xcode 4.6 et iOS 6.1.

0 votes

Je n'ai besoin de renvoyer que CGFLOAT_MIN dans les deux premières méthodes et cela fonctionne bien.

0 votes

Au lieu de 0, utilisez return .leastNormalMagnitude

33voto

Chris Points 191

Vous pouvez en fait définir les hauteurs du pied de page, de l'en-tête et des cellules dans Interface Builder, sous l'onglet Taille. Par défaut, l'en-tête et le pied de page sont fixés à 10.0.

0 votes

Je pense que ce comportement a été ajouté dans iOS 5.0 ou iOS 6.0, mais oui - il est maintenant beaucoup plus facile de configurer la distance entre les groupes.

2 votes

Je sais que c'est vieux, mais je voulais signaler que depuis XCode 5 et iOS 7, il semble que cela doive être fait dans le code. Je l'ai réglé sur 0 dans le constructeur d'interface et il était toujours réglé sur 1 jusqu'à ce que je le règle sur 0 dans le code.

0 votes

Avec Xcode 6 et iOS 8, il semble fonctionner avec la seule configuration du storyboard.

29voto

Jirune Points 337

Vous devez réduire la hauteur de l'en-tête et du pied de page de la section. Ensuite, l'espace entre les sections sera réduit.

essayez ce code

Cela fonctionne pour moi :-)

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

3voto

Chisx Points 278

MISE À JOUR POUR iOS7 : En raison de la mise à jour automatique de l'ARC, voici le code édité par @Martin Stolz.

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

(Utilisation de iOS7, Xcode v5.0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X