Comment supprimer le rembourrage inattendu sur l'en-tête d'un UITableView Presque chaque fois que je pose un contrôleur de navigation, avec un contrôleur de vue racine qui contient une vue de table le résultat est une vue de table avec un rembourrage inattendu sur son en-tête. La raison pour laquelle cela se produit est la propriété de UIViewController automatiquementAdjustsScrollViewInsets. Qui est une valeur booléenne qui indique si le contrôleur de vue doit automatiquement ajuster ses encarts de vue de défilement. . Et par défaut YES. La propriété a été introduite dans iOS 7 et avec les bordsForExtendedLayout rend le bon effet de défilement de contenu sous une barre de navigation translucide possible. Comment réparer Jusqu'à présent, j'ai trouvé deux façons de résoudre ce problème d'interface utilisateur: Définissez automatiquementAdjustsScrollViewInsets sur false Définir la valeur automaticallyAdjustsScrollViewInsets sur false résout le problème. Dans Interface Builder cela peut être fait en décrochant l'option Ajuster Scroll View Inset du contrôleur de vue où la vue de table est. Rendre la barre de navigation non translucide Une autre option est de rendre la barre de navigation non translucide. Une telle barre de navigation ne déclenche pas la vue de défilement des ajustements d'insertion dans le contrôleur de vue. Dans Interface Builder, cela peut être fait en décrochant l'option Translucent de la barre de navigation des contrôleurs de navigation. J'ai également trouvé que la seule façon de sélectionner réellement ce composant est à travers l'arborescence de la hiérarchie de vue sur la gauche. UIViewController containment Une note finale sur les vues de table intégrées via le contrôle du contrôleur de vue. Pour éviter l'en-tête de ceux-ci, nous avons besoin de nouveau pour définir à false la propriété automaticallyAdjustsScrollViewInsets du contrôleur de vue parent. Cela m'a semblé à première vue contraire à l'intuition. Mais si nous pensons à la façon dont le processus de confinement fonctionne, en extrayant la vue de l'enfant et en le plaçant dans le parent, il devient évident que les règles de disposition telles que automatiquementAdjustsScrollViewInsets du parent s'applique aussi à l'enfant. Alimentation pour les pensées Existe-t-il d'autres, peut-être mieux, la façon de résoudre ce problème Peut-il être évité en fixant les points de vue différemment Pourquoi le contrôleur de navigation standard table contrôleur de vue de la bibliothèque de composants Interface Builder ne le faire Regardez plus approfondie à l'automaticAdjustsScrollViewInsets and edgesForcextendedLayout mécanique . Veuillez activer JavaScript pour afficher les commentaires proposés par Disqus. Mokagios tech journalTheres un UITableView simple dans mon application, et theres une vue personnalisée pour la propriété tableView. tableHeaderView. Lorsque cette propriété est définie, la vue a la taille correcte (pleine largeur, environ 45px haut). Dans iOS 9 et les versions précédentes, l'en-tête affiche correctement, mais dans iOS 10, les cellules commencent à la même coordonnée Y que mon affichage d'en-tête, donc ma vue d'en-tête apparaît sur la première cellule. La définition de ces propriétés n'a aucun effet: A-t-il changé quelque chose dans iOS 10 qui pourrait expliquer ce comportement différent Quelle serait une bonne solution
No comments:
Post a Comment