web-dev-qa-db-fra.com

Xcode 9 - "Des contraintes de largeur fixe peuvent provoquer l'écrêtage" et autres avertissements de localisation

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:

 enter image description here

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?

112
Dave G

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:

 enter image description here


Ou, sélectionnez la contrainte dans le plan du document, accédez à l'inspecteur de taille et modifiez-la ici:

 enter image description here



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:

 enter image description here

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.

137
Shades

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.

 Disrespect Language Direction

53
Repose

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.

 Image

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:

 Image

26
Pascal

Avec Labels, vous pouvez définir Lines sur 0 et Autoshrink properties sur Minimum Font Size pour supprimer les avertissements Fixed Width Constraints May Cause Clipping, comme suit:

 enter image description here

24
Lionking

Pour un UIButton en changeant le titre de plain à texte attribué a également résolu mon problème: -

 enter image description here

9
dreamBegin

Swift 4, Xcode 9.1:

À 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":

 enter image description here

3
Alessandro Ornano

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.

3
reojased

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.] 

 enter image description here

1
Tom Linton

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

 constraints

Dans View je règle la constraints à laquelle je m'attendais auparavant.

1
Haroldo Gondim

Pour corriger l'erreur: des contraintes de largeur fixes peuvent causer une coupure »et une autre localisation. ou égal à: 

 Size Inspector

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é 

 Contrl + PressClick

Ajouter une contrainte de début ou de fin

 Leading/Trailing Constraint

0
Manny

J'ai eu un problème similaire en essayant d'avoir le bouton avec les mêmes rembourrages sur les bords de la super vue.

 Error case

J'ai fini par utiliser la contrainte horizontal center et la contrainte equal widths dans le super view.

 My solution

0
Pei

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.

 enter image description here

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.

0
Ulysses Alves

Si vous avez besoin d'une contrainte de largeur fixe pour le bouton, définissez simplement priorité de contrainte de largeur sur 700.

0
ChikabuZ