Les vues de table groupée semblent avoir un remplissage supplémentaire au bas de iOS 6 (iOS 5 ne l’a pas), mais je ne trouve aucune documentation suggérant qu’il s’agit d’un comportement correct ou attendu.
Cela concerne également les exemples de projets, par exemple le projet SimpleTableView
dans l'exemple TableViewSuite
. Je pense que je devais changer le style dans AppDelegate
en 'groupé' et mettre à jour le SDK pour iOS 6, mais aucune autre modification n'a été apportée au projet.
L’enquête a révélé que 10px
était réservé aux vues d’en-tête et de pied de page, plus quelques-uns 20px
qui ne pouvaient pas être comptabilisés . Il n’existait pas de vues d’en-tête ou de pied de page réelles (tableHeaderView
et tableFooterView
étaient nil
, et la mise en oeuvre et la restitution de nil
pour viewForFooterInSection
, par exemple, ne fait rien) . Je ne trouve aucune valeur '20' sur la table elle-même, bien que j'aie peut-être oublié quelque chose bien sûr.
L'ajout d'une vue de taille zéro pour le pied de page n'a aucun effet, mais l'ajout d'une vue carrée 1px
entraîne la disparition du remplissage supplémentaire. par exemple.:
tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0,0,1,1)];
Cela prend toujours 1px
de hauteur, donc le remplissage du bas est maintenant 11px
, mais cela est beaucoup moins visible que 20. Et maintenant, régler sectionFooterHeight
sur 0 donnera seulement 1px
de fond.
Ma question est: quoi? Et comment puis-je l'enlever complètement? Cela n’a rien de critique, mais c’est extrêmement étrange, indésirable et, autant que je sache, non documenté.
S'il vous plaît noter - sa copie question précédente du forum Apple dev. Mais j'ai exactement le même problème et je ne comprends pas comment le résoudre aussi.
La solution @frankWhite fonctionne très bien, mais voici une meilleure solution pour éviter de taper 0.1, 0.001 ou d’autres méthodes afin de la rendre moins ambiguë.
// Swift version
func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
// remove bottom extra 20px space.
return CGFloat.min
}
// Objective-C version
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// remove bottom extra 20px space.
return CGFLOAT_MIN;
}
Vous pouvez utiliser contentInset
pour compenser la marge inférieure supplémentaire de 20 pixels:
tableView.contentInset = UIEdgeInsetsMake(0, 0, -20, 0);
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.01;
}
C'est un travail pour moi
dans Swift 3
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude
}
C’est la seule solution qui fonctionne. J’ai essayé de régler tableFooterView
et tableHeaderView
sur nil
. Mais rien ne s'est passé. Ensuite, la solution suivante a fonctionné .Revenir à zéro "retourner 0;" n'a aucun effet.Nous devrions retourner la hauteur la plus basse possible.
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
NOTE: C'est ce que j'ai obtenu en imprimant les valeurs.
CGFLOAT_MAX = 340282346638528859811704183484516925440.000000
CGFLOAT_MIN = 0.000000
cela résout le problème: Obj-c - (CGFloat) tableView: (UITableView *) tableView heightForFooterInSection: (NSInteger) section { retourne 0,1; }
Swift: Écrase func tableView (_ tableView: UITableView, section heightForFooterInSection: Int) -> CGFloat { retourne 0.1 }
Dans Swift 4.2, vous pouvez essayer de définir l’en-tête de tableau avec une hauteur d’amplitude minimale -
var frame = CGRect.zero
frame.size.height = .leastNormalMagnitude
tableView.tableHeaderView = UIView(frame: frame)
Le code suivant fonctionne pour moi
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0;
}
Swift 3 code
class PaddingLessTableView : UITableView
{
override func layoutSubviews() {
self.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
super.layoutSubviews()
}
}