Réduire l'espace entre les sections de UITableView


141

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

Aucune suggestion?


1
J'utilisais un tableau groupé et définissais la hauteur de l'en-tête / pied de page sur 0.0. Mais il montrait une zone grise avec une hauteur (par défaut) de 30 points. L'utilisation 0.0n'est pas acceptée. vous devez utiliser n'importe quelle valeur ci-dessus, 0.0par exemple 0.0001.
Honey

Comme le dit @Honey, 0.0cela ne fonctionne pas. J'ai une réponse plus détaillée pour le même problème ici: stackoverflow.com/a/22185534/2789144
James Nelson

Réponses:


263

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 raisonnable semble être 1,0.


2
Vous devriez retourner 5.0f au lieu de 5.0, en raison de conflits à double flottant
LeonS

45
Vous pouvez même renvoyer 0,00001f comme hauteur et vous obtiendrez une hauteur de 0 pixels / points.
Klaas

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

26
Pourquoi ne pas utiliser CGFLOAT_MIN? C'est fait pour ce genre de scénarios :)
Andrei Filip

12
Si vous utilisez Swift, vous pouvez revenirCGFloat.leastNonzeroMagnitude
oztune

140

Pour tous ceux qui veulent réduire la distance à 0, vous devez utiliser:

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

Parce que la diffusion de UITableViewDelegate ne produit qu'un effet à 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];
}

(en utilisant iOS 4.1 avec XCode 4.0.2)


7
retourne 0,0001; travaille pour moi. J'utilise xcode 4.6 et iOS 6.1
Sam

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

au lieu de 0 utilisationreturn .leastNormalMagnitude
stan

33

Vous pouvez en fait définir les hauteurs de pied de page / d'en-tête / de cellule dans Interface Builder sous l'onglet Taille. Par défaut, l'en-tête / pied de page est défini sur 10,0.


Je pense qu'un tel 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.
Vlas Voloshin

2
Je sais que c'est vieux, mais je voulais dire qu'à partir de XCode 5 et iOS 7, il semble que cela DOIT être fait dans le code. Je l'ai défini dans le constructeur d'interface sur 0 et il était toujours défini sur 1 jusqu'à ce que je le définisse dans le code sur 0.
Ahmad

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

ils sont définis sur 18 sur xcode 7 par défaut. mais c'est de loin la solution la plus simple!
static0886

27

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

essayez ce code

Ça marche pour moi :-)

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

21

Vous pouvez également réduire la hauteur du pied de page et de l'en-tête de section à partir du storyboard. Dans le tableauview -> inspecteur de taille. Allez à Hauteur de la section.

Inspecteur de taille pour UITableView dans le storyboard.

Par défaut, il est défini sur 22 pour le tableau de style simple et 10 pour le tableau de style groupé. Vous pouvez configurer des valeurs en augmentant / diminuant les valeurs de l'en-tête et du pied de page séparément.


6

Pour moi, le problème était dû au fait que j'utilisais un style de vue de tableau groupé ( UITableViewStyleGrouped). Quand je l'ai changé pour un style simple ( UITableViewStylePlain), ma tableView:heightForHeaderInSection:méthode était la seule chose qui déterminait la taille de chaque en-tête de section.


4

Utilisez ceci peut-être, 0 ne fonctionnera pas comme prévu

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

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

3

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

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

(Avec iOS7, Xcode v5.0)


0

Pour moi, ce problème a été résolu simplement en utilisant le code suivant,

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

Le renvoi de 1 pour la première section a résolu le problème.


0

Pour modifier l'espace d'en-tête / pied de page, les méthodes suivantes doivent être implémentées:

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

ET

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

(utilisez les méthodes correspondantes pour modifier la hauteur du pied de page)

Le code suivant supprime complètement les espaces autour des sections:

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
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.