66 votes

Attributs de mise en page relatifs à la marge de mise en page sur les versions d'iOS antérieures à 8.0

Quelle serait la cause de l'avertissement suivant (et des problèmes d'alignement ultérieurs sous iOS 7) ?

Attribut non disponible : Attributs de mise en page relatifs à la marge de mise en page sur les versions d'iOS antérieures à 8.0

91voto

Legoless Points 1583

Aucune des réponses affichées n'a résolu le problème pour moi. Mais la raison en est la suivante : Xcode 6 crée des contraintes basées sur les marges relatives par défaut. Ceux-ci ne sont disponibles que sur iOS 8.0 et plus récent. Vous obtenez ces avertissements lorsque votre cible de déploiement est définie sur iOS 7.0 ou inférieur.

La façon dont j'ai réparé l'avertissement :

  • Cliquez sur l'avertissement dans Xcode
  • L'inspecteur d'attributs ouvre la contrainte.
  • Rechercher l'élément qui a une marge (voir capture d'écran)
  • Éteindre Par rapport à la marge option

Attribute inspector

61voto

Andy Points 2729

Désactiver "Préférer la marge relative".

enter image description here

38voto

Matt R Points 121

En décochant la case "Préférer la marge relative", vous éviterez de vous retrouver dans la situation où vous recevez cet avertissement.

Si vous êtes comme moi et que vous avez construit une application entière avec des contraintes avant de vous rendre compte du problème, alors les choses sont un peu plus difficiles car Xcode ne vous dira pas facilement quelles contraintes posent problème.

Afin d'éviter de reconstruire toutes mes contraintes, j'ai eu recours à l'examen du fichier .storyboard et j'ai recherché des contraintes comme celle-ci :

<constraint firstItem="vId-..." firstAttribute="top" secondItem="In7-..." secondAttribute="topMargin" id="C0H-..."/>

Remarquez "topMargin". Les attributs se terminant par "Margin" sont à l'origine de l'avertissement. J'ai identifié les contraintes dans le fichier de cette manière, puis je les ai supprimées et recréées dans IB. Après cela, l'avertissement a disparu.

Je pense que cela devrait également résoudre certaines incohérences entre la gestion des contraintes d'iOS 7 et d'iOS 8, bien que je rencontre encore quelques différences de comportement, même après avoir pris en compte tous les avertissements de Xcode.

6voto

Jonathan Arbogast Points 4852

Je suis actuellement dans la même situation car je suis en train de créer une application dans Xcode 6 qui vise iOS7 et 8. Cet avertissement apparaît parce que les contraintes relatives à la marge ne sont pas disponibles dans iOS7, mais elles sont créées par défaut dans Xcode 6.

Vous pouvez tout à fait revenir en arrière et modifier la contrainte pour ne pas utiliser la fonction "Relative à la marge", comme le suggèrent les autres réponses à cette question.

Lorsque je crée de nouvelles contraintes, je maintiens la touche Option enfoncée pour choisir le type de contrainte à créer. Cela me permet de créer immédiatement une contrainte qui n'est pas basée sur la marge, sans avoir à revenir en arrière pour la corriger.

3voto

ShakeMan Points 31

J'ai adopté une approche de non programmeur.

Je savais quel contrôleur de vue était à l'origine du message de marge 8.0. J'ai donc consulté ma liste de contraintes. J'en avais 33. J'ai supprimé toutes celles qui provoquaient le message de marge 8.0. Je suis descendu à 20 (11 était donc le problème).

Sélectionnez 32 sur 33 supprimer et voyez le résultat. Sélectionner 31 sur 33 supprimer et ainsi de suite ... Naturellement, lorsque le message est toujours là... supprimez celui qui pose problème.

Alors il m'a fallu 5 minutes pour résoudre le message d'erreur.

D'autres messages de contrainte sont apparus, mais ce n'est pas grave.

Ok alors, refaites et résolvez étape par étape les messages de contrainte mais cette fois vérifiez que toutes les contraintes que vous ajoutez ne provoquent pas la réapparition du message de marge 8.0. Si c'est le cas, annulez et adoptez une autre stratégie pour ajouter des contraintes. Il y a toujours une autre façon d'ajouter une contrainte qui fonctionne.

Ce n'est pas ce qui est proposé par Xcode mais cela fera l'affaire.

A la fin, votre fait .

Si vous avez plus d'un contrôleur de vue, et que vous ne savez pas lequel est à l'origine du message de marge 8.0, essayez d'isoler chaque contrôleur de vue. Cela peut se faire dans un projet de test séparé avec un copier-coller ou en supprimant toutes les autres vues sauf une et voir le résultat.

L'utilisation de la fonction "Créer un instantané" dans le menu fichier peut vous aider si quelque chose ne va pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X