web-dev-qa-db-fra.com

UITableView groupé a 20px de remplissage supplémentaire au bas

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.

45
Vlad Polyanskiy

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;
} 
64
tounaobun

Vous pouvez utiliser contentInset pour compenser la marge inférieure supplémentaire de 20 pixels:

tableView.contentInset = UIEdgeInsetsMake(0, 0, -20, 0);
29
an0
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
   return 0.01;
} 

C'est un travail pour moi

10
frankWhite

dans Swift 3

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

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

3
abhi1992

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 }

0
Joe

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)
0
Yash

Le code suivant fonctionne pour moi

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

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

Swift 3 code

class PaddingLessTableView : UITableView
{
    override func layoutSubviews() {
        self.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        super.layoutSubviews()
    }
}
0
hhamm