J'ai téléchargé le nouveau Xcode et dans Interface Builder, j'ai des tonnes de problèmes avec les avertissements qui disent des choses comme:
Des contraintes de largeur fixe peuvent provoquer un écrêtage
Cela ressemble à ceci:
J'ai la localisation de plusieurs langues et je comprends l'avertissement que, dans une autre langue, la taille d'une étiquette peut changer, mais mon application n'a pas ce problème. J'ai couru et testé dans Xcode 8 hier, c'était bien. Je ne veux pas passer des heures et des heures à ajouter de nouvelles contraintes inutiles.
Des solutions suggérées?
Je recevais les mêmes avertissements même sans plusieurs langues dans mon application}, _, ce qui m'a amené à découvrir ce qui se passait réellement. . .
Il y a différentes choses qui se passent ici. J'étais capable de couper les avertissements de largeur fixe dans ma propre application en modifiant le largeur des espacements d'objet de largeur fixe en supérieur ou égal ou inférieur ou égal.
Pour ce faire, sélectionnez l’objet dans le générateur d’interface, accédez à l’inspecteur de taille et modifiez-le à cet emplacement:
Ou, sélectionnez la contrainte dans le plan du document, accédez à l'inspecteur de taille et modifiez-la ici:
En ce qui concerne l'avertissement en haut de votre capture d'écran:
_ {Des contraintes fixes de début et de fin avec une contrainte centrale peuvent provoquer un écrêtage
Voici une capture d'écran de ma propre application dans laquelle je recevais exactement le même avertissement:
J'avais l'étiquette avec le signe @ positionné en tête et en fin aux boutons mais aussi pour aligner le centre avec l'étiquette de notation. Une fois que je (enlevé la contrainte d'alignement du centre} _, l'avertissement a disparu, mais il me restait un ensemble d'objets mal disposés.
C'est alors que je me suis résigné à embrasser la vue pile. Aussi ennuyeux qu’il puisse être utilisé, lorsque vous maîtrisez bien toutes les contraintes et tous les paramètres, il se déroule de manière magnifique et sans aucun avertissement.
Modifier
Comme Repose _ écrit dans les commentaires, il vous suffit parfois d'ajouter> = 0, car vous vous assurez que deux éléments ne se chevauchent pas.
Vous pouvez essayer de désactiver "Respecter la direction du langage" sur une base par contrainte pour faire taire l'avertissement et voir si cela aide. Sélectionnez votre contrainte et ouvrez l'inspecteur Attributs/Taille. S'il vous plaît voir l'image ci-jointe.
p.s. Cette solution fonctionne pour iOS. Pour macOS, essayez> = ou <= pour faire taire l'avertissement.
Pour les étiquettes et les boutons localisés, cet avertissement est logique et vous devez indiquer les contraintes nécessaires pour que vos étiquettes ne se chevauchent pas. Si elles ne se chevauchent pas maintenant, elles le seront peut-être à l'avenir, il ne sera donc pas inutile de fournir les contraintes.
Xcode vous aide à ajouter ces contraintes automatiquement:
Dans le contour du document de votre storyboard, cliquez sur la flèche jaune et choisissez soit "avance fixe" soit "suivi fixe", en fonction de l'emplacement du texte sur votre écran (gauche ou droite). Cela résoudra le problème dans la plupart des cas.
Si vous rencontrez ce problème avec un Button sans texte (uniquement une image), essayez de supprimer le "titre par défaut" qui peut encore être défini pour le bouton:
À propos de ce problème, je pense que votre objet ne sait pas quelle est la position centrale correcte dans le contexte de son superview, et utilise la plupart du temps supprimer, supérieur à ou d'autres paramètres ne fonctionne pas correctement Tout d'abord, vous devez vérifier les contraintes correctes de votre superview.
Si votre/vos superview sont correctement configurés, vous pouvez essayer "d'expliquer" à votre objet quelle est la position correcte dans la vue en définissant la contrainte "horizontalement dans le conteneur":
Je sais que cette question a déjà reçu une réponse, mais ce que j’ai fait pour corriger cette erreur dans mon cas a été d’ajouter la propriété "Aspect ratio" puis d’éliminer la contrainte de largeur ou de hauteur. la même sortie et adapter ma vue pour les différents appareils.
J'ai eu le même problème en passant à Xcode 9 et j'ai trouvé une approche utile pour certains types de mises en page. Dans mon cas, je voulais un en-tête de tableau dans lequel deux colonnes (UILabels) avaient une largeur fixe et une autre avait une largeur variable. Indépendamment de la manière dont j'ai spécifié la largeur des colonnes (y compris l'utilisation de contraintes supérieures ou égales au lieu d'égales, etc.), je continuais à recevoir l'avertissement concernant le possible écrêtage. Dans mon cas, je voulais que la colonne à largeur variable (UILabel) soit découpée si nécessaire. J'aurais pu simplement ignorer l'avertissement, mais je n'aime pas faire cela.
L'approche qui a fonctionné ici a été de créer un UIView avec des contraintes de taille appropriées et d'intégrer UILabel en tant que sous-vue dans UIView. Ensuite, la troncature se produit si nécessaire et je ne reçois aucun avertissement. Cela fonctionne que le UIView/UILabel incorporé soit dans un StackView ou non.
C'est essentiellement la même approche que celle de Haroldo Gondim, mais ici, vous pouvez voir que cela fonctionne aussi avec ou sans StackView.
L'image suivante montre l'approche, avec et sans StackView. "SpacerName" est une UIView de largeur variable contenant une étiquette et "SpacerPD" en est une de largeur fixe 80. [Les couleurs ne sont pas significatives; juste là pour montrer où sont les vues.]
J'ai eu le même problème, mais lorsque je passe à >=
, la constante est automatiquement définie sur 0
; si je choisis par exemple 60
, l'avertissement apparaît à nouveau. Donc j'étais au courant du problème.
Je pourrais résoudre l'intégration de ma Label
dans une View
Editor > Embed In > View
Dans Label
j'ai placé Top
, Bottom
, Leading
et Trailing
avec constant = 0
Dans View
je règle la constraints
à laquelle je m'attendais auparavant.
Pour corriger l'erreur: des contraintes de largeur fixes peuvent causer une coupure »et une autre localisation. ou égal à:
Pour corriger l'erreur: la contrainte de début/fin est manquante, ce qui peut entraîner un chevauchement avec d'autres vues
Cela signifie que la vue/l'objet dont Xcode se plaint, qu'il manque une contrainte de début ou de fin à une vue voisine.
Tout en maintenant le contrôle, faites glisser vers une vue/un objet à proximité
Comme vous pouvez le voir dans l'image ci-dessous, l'erreur "Des contraintes de largeur fixes peuvent provoquer l'écrêtage" car, même si j'avais défini mon champ de texte pour qu'il soit centré verticalement et que mon libellé ait une contrainte de marge gauche, je n'avais t défini une contrainte pour la zone de texte par rapport à l’étiquette, donc XCode m’avait averti que la zone de texte pouvait découper (être rendue au-dessus) l’étiquette.
Après avoir ajouté la contrainte de gauche à la zone de texte pour rester toujours à une certaine distance de l'étiquette, l'erreur était considérée comme résolue par XCode et cela ne me dérangeait plus avec l'avertissement de contrainte.
Si vous avez besoin d'une contrainte de largeur fixe pour le bouton, définissez simplement priorité de contrainte de largeur sur 700
.