web-dev-qa-db-fra.com

Espace entre les sections dans UITableview

J'ai besoin de réduire l'espace entre deux sections de UITableView. J'ai regardé ceci question mais la solution ne permet pas l'affichage en-tête personnalisé, car elle combine l'espace du pied de page et de l'en-tête.

Voici une image du UITableView. La couleur noire est la couleur de fond UITableView.

tableview screenshot

45
Joel

Avez-vous essayé de remplacer cette fonction:

 override func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 0.00001
  }
101
Icaro

Je pense que vous pouvez résoudre ce problème en ajustant la hauteur de vue du pied de page à sa valeur minimale: dans Storyboard ou XIB.enter image description here

Je ne sais pas ce que vous avez écrit dans votre code pour la hauteur du pied de page. Désolé si je me trompe.

Possibilité de dupliquer Masquer la vue du pied de page dans UITableView

38
Sudhin Davis

Pour Swift 3

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

Avec le réponse publiée par Icaro Je voudrais ajouter que vous devez également implémenter la méthode tableView:viewForFooterInSection: Renvoyant nil pour la section dont vous souhaitez supprimer l'espace vide ci-dessous il deviendra alors:

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

-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return nil;
}
5
Nicholas Allio

Vous devez utiliser la méthode heightForHeaderInSection pour définir l'espace entre le texte de l'en-tête et de la cellule. 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 fossé. 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.

5
Aks

Pour Swift 4+, vous devez remplacer ces deux méthodes.

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

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return UIView()
    }
1
Ladd.c

Cela peut aussi aider:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.sectionHeaderHeight = UITableViewAutomaticDimension
}
1
polarwar

Les méthodes de délégué TableView n'affectent pas avec une valeur float égale à 0.0f. Essayez de donner une valeur supérieure à celle.

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

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

Vous pouvez le faire en implémentant le délégué heightForHeaderInSection & heightForFooterInSection.

La valeur de retour ne doit pas être 0, même si SectionHeader ou la hauteur de SectionFooter est 0, il faut une très petite valeur, essayez CGFLOAT_MIN.

pour mon exemple:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
if (section == [self.dataArray indexOfObject:self.bannerList]) {
    return 46;
}
return CGFLOAT_MIN;

}

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