Est-ce juste moi ou ils ont ajouté beaucoup plus de remplissage aux en-têtes de section et aux pieds de page de UITableView
s groupés dans iOS 11?
J'ai compilé mon application pour fonctionner avec iOS 11 et j'ai remarqué le remplissage supplémentaire ..__ Je l'ai un peu résolu en définissant contentInset.top
sur une valeur négative vérifiant que le système d'exploitation est iOS 11, mais il s'agit d'une solution de contournement déplorable.
Existe-t-il un autre moyen plus efficace de supprimer le remplissage supplémentaire des vues de table groupées afin d'obtenir les mêmes résultats sur toutes les applications iOS prises en charge? Ça pue un peu d'avoir plusieurs vérifications pour une chose aussi stupide.
Capture d'écran pour comparaison:
Comme vous pouvez le constater, sur iOS 11, il existe un espacement supplémentaire entre les sections (ouais, ce sont des sections!).
Dans iOS 11, le pied de section présente une vue qui ajoute à l’espacement entre les sections. Vous devez définir explicitement la vue du pied de page sur nil en plus de régler la hauteur du pied de page:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return nil;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Cela fera ressembler votre vue de table à ce que vous aviez dans iOS 10 et n’aurait aucun effet sur les versions précédentes d’iOS. Vous pouvez faire la même chose pour l'en-tête si vous n'en avez pas besoin.
Il vous suffit de définir l'en-tête et le pied de page de la vue tableau.
- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return [[UIView alloc] init];
}
- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [[UIView alloc] init];
}
Avec mon .grouped
UITableView, je faisais face au même problème dans iOS 11, cela fonctionnait bien lorsque j'utilisais une UITableViewController
, mais pas dans UIViewController
, ce qui suit a fonctionné dans mon cas:
tableView.estimatedSectionHeaderHeight = 0
Sans la ligne ci-dessus, tableView(heightForHeaderInSection
n'est jamais appelé.
Cela ressemble à un bug dans iOS 11.
J'ai résolu mon problème en définissant l'en-tête et le pied de page dans Storyboard. Apparemment, dans Xcode 9, il s’agit des valeurs par défaut lorsque vous créez un UITableView
J'ai essayé de les mettre à 0, mais 1 est le minimum et cela a résolu le problème. De plus, j'ai vérifié son comportement si le automatic était coché et que cela fonctionnait également.
De plus, je ne sais pas s'il s'agit d'un bogue, mais je ne pourrais pas le faire sur une table existante. Je devais le supprimer et le faire glisser à nouveau dans UIViewController.
Si la réponse de rashid n'a pas fonctionné avec la définition de contentInsetAdjustmentBehavior sur jamais, essayez ce qui suit:
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0
self.tableView.estimatedSectionFooterHeight = 0
J'ai eu un problème similaire, je pense que c'était un bug dans Old Xcode.
Si vous utilisez autolayout et que vous avez une vue du contenu et des vues à l'intérieur de celle-ci, le paramètre Limiter aux marges ne fonctionne pas dans Xcode 8, mais maintenant dans xCode 9. Vous devez redéfinir vos contraintes et décocher la case correspondante dans la vue dans tous les voir les cellules. Cela sera alors cohérent sur tous les périphériques ios 10 et ios 11.