web-dev-qa-db-fra.com

iPhone UITableView: Comment supprimer l'espacement entre les sections d'une table de style de groupe?

Je crée une vue sous forme de tableau dans laquelle il y a 10 sections, toutes ayant une vue en-tête mais pas de cellules. Donc, en bref, ma vue tableau affichera 10 vues d'en-tête seulement; il n'y aura pas de cellules dans aucune section. Maintenant, quand je fais cela, il y a un peu d'espace entre les vues d'en-tête de la section. Je veux supprimer cet espace. Est-ce possible? Pouvez-vous me donner un indice ou un moyen de contourner ce problème?

Voici les méthodes de source de données:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
   return 10;
}

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

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UILabel * label = [[UILabel alloc] init];
    label.backgroundColor = [UIColor grayColor];
    return label;
}

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

Voici la capture d'écran de la sortie: enter image description here

J'ai une raison un peu complexe pour laquelle je le fais comme ça, que je ne pourrai pas expliquer par l'écriture. Tout ce que je veux, c'est ne pas avoir d'espacement dans les vues d'en-tête de la section. Merci d'avance.

16
Bharat Jagtap

Essaye ça..

   self.tableView.rowHeight = 0; // in viewdidload
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; // in viewdidload

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

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return <your header height>;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
return <your header view>;
}

Ayez également le séparateur de table comme aucun.

47
RAJA

Si vous renvoyez 0 dans tableView:heightForFooterInSection:, la valeur par défaut est renvoyée (probablement 10.0). C'est délicat, mais vous pouvez utiliser CGFLOAT_MIN au lieu de 0 pour supprimer le pied de page. 

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

Mise à jour:

Swift 3 :

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

Essayez avec le code suivant

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.25; // as for you need
}

vous pouvez également gérer en suivant la méthode déléguée 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

Est courte, vous pouvez le gérer par la méthode ci-dessus deux.

3
iPatel

Vous pouvez le faire directement dans l'interface, vous devez définir la hauteur du pied de page sur 1 comme ceci:

 enter image description here

3
Ugo Marinelli

La tableview de style groupé a un pied de page par défaut, vous devez également personnaliser le pied de page pour le remplacer. 

ou 

essayez le style simple.

typedef enum {
   UITableViewStylePlain,
   UITableViewStyleGrouped
} UITableViewStyle;
2
lancy

Donc je ne peux pas voter mais je peux poster une réponse

La bonne réponse à cette façon en fait

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

Modifier le style d'affichage de la table de groupé à plaine. Cela a résolu mon problème.

0
user2179059

Vous devez utiliser la méthode heightForHeaderInSection. Vous pouvez également le modifier en fonction des différentes sections, par exemple. dans certaines sections, vous devrez peut-être afficher plus de distance et sous certaines sections, vous ne souhaitez pas afficher de décalage Dans ce cas, vous pouvez utiliser CGFLOAT_MIN, qui est 0.000001f. En vous donnant un exemple, comment utiliser différentes sections avec différentes hauteurs d'en-tête

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0 || section == 2)
    {
        return 55.0;
    }
    else
    {
        return CGFLOAT_MIN;
    }
}

J'espère que cela vous aidera.

0
Aks