163 votes

Xcode 9 - "Les contraintes de largeur fixe peuvent provoquer des coupures" et autres avertissements relatifs à la localisation

J'ai téléchargé le nouveau Xcode et dans Interface Builder j'ai une tonne de problèmes avec des avertissements qui disent des choses comme :

Les contraintes de largeur fixe peuvent provoquer un écrêtage

Ça ressemble à ça :

enter image description here

Je dispose d'une localisation pour plusieurs langues et je comprends l'avertissement selon lequel la taille d'une étiquette peut changer dans une autre langue, mais mon application n'a pas ce problème. Je l'ai exécutée et testée dans Xcode 8 hier, tout s'est bien passé. Je ne veux pas passer des heures et des heures à ajouter de nouvelles contraintes inutiles.

Des suggestions de solutions ?

0 votes

Je vous suggère de vous pencher sur l'autoréduction.

0 votes

J'ai également du mal avec ce problème. J'obtiens l'erreur sur un bouton (sans texte) qui a seulement une image d'arrière-plan que je veux définir à 50x50.

3 votes

C'est la même chose. Il y a des boutons dont la largeur est garantie à 50 pt dans toutes les langues. Pourquoi souiller mon bulletin d'autolayout, par ailleurs très propre, avec cela ?

198voto

Shades Points 3657

Je recevais les mêmes avertissements même sans plusieurs langues dans mon de l'application ce qui m'a conduit à découvrir ce qui se passait vraiment .

Il y a plusieurs choses différentes qui se passent ici. J'ai pu faire taire les avertissements à largeur fixe dans ma propre application en changeant le largeur de l'objet espacements d'une largeur fixe à supérieur ou égal ou inférieur ou égal à .

Pour ce faire, il suffit de sélectionner l'objet dans le générateur d'interface, d'accéder à l'inspecteur de taille et de modifier celle-ci :

enter image description here


Ou bien, sélectionnez la contrainte dans le contour du document, allez dans l'inspecteur de taille et modifiez-la à cet endroit :

enter image description here



En ce qui concerne l'avertissement en haut de votre capture d'écran :

Correction des contraintes de tête et de queue avec une contrainte centrale qui peuvent provoquer un écrêtage

Voici une capture d'écran de ma propre application dans laquelle j'ai reçu exactement le même avertissement :

enter image description here

J'avais l'étiquette avec le signe @ en tête et en queue pour les boutons, mais aussi pour aligner le centre avec l'étiquette de classement. . Une fois que j'ai a supprimé la contrainte d'alignement central L'avertissement a disparu, mais je me suis retrouvé avec un ensemble d'objets mal disposés.

C'est alors que je me suis résigné à embrasser la vue de la pile . Aussi ennuyeux qu'il soit à utiliser, lorsque toutes les contraintes et tous les paramètres sont corrects, il s'affiche magnifiquement et sans aucun avertissement.


Modifier

Comme Repose écrit dans les commentaires, parfois le simple fait d'ajouter >= 0 sera suffisant, car vous vous assurez que deux éléments ne se chevauchent pas.

2 votes

>= 0 empêche le chevauchement et corrige les problèmes de chevauchement que j'avais précédemment, la conversion de Leading/Trailing en Right/Left a corrigé l'erreur d'écrêtage pour moi. Les résultats peuvent varier. Veuillez consulter votre médecin avant de commencer tout développement de logiciel.

0 votes

@Repose Exactement. Pensez à ce qui pourrait mal tourner et ajoutez une contrainte pour vous assurer que ce ne sera pas le cas.

0 votes

Se résigner à utiliser Stack View dans iOS est peut-être correct, mais pour OS X (désolé MacOS) ce n'est pas toujours un bon choix. Apple devrait le savoir. Le concept d'UI et d'UX a souvent des hypothèses différentes.

65voto

Repose Points 1025

Vous pouvez essayer de désactiver l'option "Respecter le sens de la langue" pour chaque contrainte afin de faire taire l'avertissement et voir si cela peut aider. Sélectionnez votre contrainte et ouvrez l'inspecteur Attributs/Taille. Veuillez consulter l'image ci-jointe.

Si vous ne prévoyez pas de localiser votre application dans d'autres langues, cette solution ne doit pas comporter de solution de repli. Pour les applications localisées, vous devez être plus attentif à la taille des étiquettes et des polices.

p.s. Cette solution fonctionne pour iOS. Pour macOS, essayez >= ou <= pour faire taire l'avertissement.

p.p.s. Les étiquettes de l'image ci-dessous sont beaucoup plus faciles à créer en utilisant AutoLayout et la propriété attributedString sur un seul UILabel ou UITextView en utilisant NSMutableAttributedString. L'image est uniquement destinée à des fins de démonstration.

Disrespect Language Direction

0 votes

@Shades Avez-vous essayé pour l'avant et l'arrière ? Ils devraient être convertis en droite et/ou gauche

1 votes

J'ai corrigé le problème "La fixation des contraintes de tête et de queue avec une contrainte centrale peut provoquer un écrêtage". Merci !

4 votes

Si vous avez essayé et que cela ne semble pas avoir d'effet, essayez de quitter Xcode et de le redémarrer. Cette astuce a fonctionné pour moi.

36voto

Pascal Points 730

Pour les étiquettes et les boutons qui sont localisés, cet avertissement est logique et vous devez fournir les contraintes nécessaires pour que vos étiquettes ne se chevauchent pas. S'ils ne se chevauchent pas maintenant, ils pourraient le faire à l'avenir, donc il n'y a pas de mal à fournir les contraintes.

Xcode vous aide à ajouter ces contraintes automatiquement :

Dans le plan du document de votre storyboard, cliquez sur la flèche jaune et choisissez "fixed leading" ou "fixed trailing", en fonction de l'endroit où se trouve le texte sur votre écran (gauche ou droite). Cela permettra de résoudre la plupart des problèmes.

Xcode screenshot

Si vous rencontrez ce problème avec un Bouton sans texte (seulement l'image), essayez de supprimer le "titre par défaut" qui pourrait encore être défini pour le bouton :

Xcode screenshot

6 votes

Dans mon cas, la suppression du titre par défaut a fait disparaître l'avertissement. Merci !

0 votes

Notez que lorsque vous ajoutez un UIButton à Storyboard le default button Le titre sera button .

31voto

Lionking Points 480

Avec Labels vous pouvez définir Lines est 0 et Autoshrink Les propriétés sont Minimum Font Size de supprimer Fixed Width Constraints May Cause Clipping des avertissements, comme ceci :

enter image description here

3 votes

Oui, il suffit de mettre les lignes à 0.

2 votes

Si vous définissez la valeur 0 pour les lignes, l'étiquette s'étendra sur autant de lignes que nécessaire, ce qui n'est peut-être pas ce que vous souhaitez.

0 votes

@nickdnk : je sais que, si vous fixez une contrainte de hauteur pour le label, il ne s'étendra pas.

23voto

dreamBegin Points 1431

Une autre solution rapide !

Pour un bouton UIB, le changement du titre de texte simple à texte attribué a également résolu mon problème.

enter image description here

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