Problème de layout Xcode 8.3 à Xcode 9

Bonjour tous le monde

Lors de la migration de mon App de Xcode 8 à Xcode 9 un nouveau problème bizarre de layout est apparu avec ma table view.
Sur le simulateur (photo de gauche) le table view est correctement affiché, mais sur le iPhone le table view est décalé de 64 points vers le bas.

Le décalage vertical de 64 points correspond à la hauteur de la barre de navigation. Je pense qu’il doit il y avoir un lien, mais je n’ai pas réussi découvrir lequel.

Avec la version précédente de Xcode mon table view s’affichait parfaitement sur mon iPhone.
J’ai essayé de reprendre toutes les constraints de zéro, mais ça n’a rien changé.
J’ai testé de reproduire le même problème d’interface avec un nouveau projet mais là je n’ai eu aucun problème sur mon iPhone. La seule différence que j’ai remarquée, c’est que le nouveau projet possède une « safe area ».

J’ai aussi vérifié dans la console le print des coordonnées Y de la table view sur le simulateur et sur le iPhone et ils sont identiques. Malgré le fait que les origines Y des table view soient identiques, l’affichage est différent.

Voila les constraints que j’ai utilisé pour la view (« fondView ») qui sert de fond pour ma courbe sur la photo du dessus et les constraints que j’ai utilisé pour la table view.

Est-ce que vous sauriez comment résoudre ce problème de layout ou auriez des pistes ?

Sylvain

Salut Manujitsu,

Le storyboard de xcode 9 à introduit ce qu’on appel “la safe area” en fait c’est une zone de “sécurite” qui se trouve en haut et en bas de la page. Tu devrai donc supprimer tes contrainte qui sont fixer par rapport au haut et bas de le view et les fixer pluto sur “la safe area”. En fait cette “safe area” permet l’adaptation de l’affichage avec les nouvelles navigation bar d’ios 11 et je suppose aussi pour bien adapter l’affichage sur iphone x.

https://developer.apple.com/videos/play/wwdc2017/412/

1 « J'aime »

Salut Samir,

Merci pour ta réponse. Ok je vais voir comment ajouter une safe area. J’espère pouvoir le faire avec un projet Xcode 8.

Tu ne peux pas ajouter une SafeArea manuellement. Elle est automatiquement générée par Xcode 9. Peut-être en utilisant l’outil de conversion code iOS 10=>iOS 11. Je n’ai pas essayé.

1 « J'aime »

Merci Draken. Je vais tenter le coup avec une copie de mon projet.

Du coup j’ai essayé la conversion de code iOS 10 à 11 et ça ne m’ajoute pas la safe area. Mais bon, l’app s’affiche très bien sous iOS 11 et la gène n’est pas bloquante sur iOS 10. Et peut être que dans 2 ou 3 mois la plupart des utilisateurs seront passés sous iOS 11.

Désolé j’ai oublier de le spécifier, pour l’activer cf caputre d’dcran.

1 « J'aime »

Oui j’ai essayé ça aussi mais ça n’a fait aucune différence. Pourtant j’avais bien mis en place mes constraints par rapport à la safe area.

En transférant quelque application de 8.3 a 9 certaine app avait 20 a 50 erreur de contrainte, avec le temps des corrigées j’ai constater que 98% avaisl’équation equal en changeant par >= 0u <= sa fonctionner assez bien long a faire mais maintenant compatible avec 10 et 11 ios.

Perso j’ai eu les même warning et c’est ce que j’ai essayé aussi. Mais même si les warning avaient disparus, j’ai eu encore plus de problèmes de layouts.