J'ai téléchargé le nouveau Xcode et dans Interface Builder, j'ai une tonne de problèmes avec les avertissements qui disent des choses comme:
Les contraintes de largeur fixe peuvent provoquer un écrêtage
Cela ressemble à ceci:
J'ai une localisation pour 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. Je l'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?
Réponses:
J'obtenais les mêmes avertissements même sans plusieurs langues dans mon application , ce qui m'a amené à découvrir ce qui se passait vraiment. . .
Il se passe plusieurs choses différentes ici. J'ai pu désactiver les avertissements de largeur fixe dans ma propre application en modifiant la largeur des espacements des objets de largeur fixe à supérieure ou égale ou inférieure ou égale .
Cela peut être fait en sélectionnant l'objet dans le générateur d'interface, en accédant à l'inspecteur de taille et en le modifiant ici:
Ou, sélectionnez la contrainte dans le contour 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:
Voici une capture d'écran de ma propre application dans laquelle je recevais exactement le même avertissement:
J'ai eu l'étiquette avec le signe @ défini sur le début et la fin des boutons, mais aussi pour aligner le centre avec l'étiquette de notation . Une fois que j'ai 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é à adopter la Stack View . Aussi ennuyeux que cela puisse être à utiliser, lorsque vous maîtrisez toutes les contraintes et tous les paramètres, il se présente magnifiquement et sans avertissement.
Éditer
Comme Repose l' écrit dans les commentaires, parfois simplement ajouter> = 0 sera ce dont vous avez besoin, car vous vous assurez que deux éléments ne se chevauchent pas.
la source
Vous pouvez essayer de désactiver "Respecter la direction de la langue" par contrainte pour faire taire l'avertissement et voir si cela aide. Sélectionnez votre contrainte et ouvrez l'inspecteur Attributs / Taille. Veuillez voir l'image ci-jointe.
Si vous ne prévoyez pas de localiser votre application dans d'autres langues, cette solution ne devrait pas avoir de solution de secours. Pour les applications localisées, vous devez être plus conscient de votre étiquette et de la taille de votre police.
ps Cette solution fonctionne pour iOS. Pour macOS, essayez> = ou <= pour désactiver l'avertissement.
pps Les étiquettes dans l'image ci-dessous sont beaucoup plus faciles à créer à l'aide de la mise en page automatique et de la propriété attribuéeString sur un seul UILabel ou UITextView à l'aide de NSMutableAttributedString. L'image est uniquement à des fins de démonstration.
la source
Pour les étiquettes et les boutons 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, il ne sera donc pas inutile de fournir les contraintes.
Xcode vous aide à ajouter automatiquement ces contraintes:
Dans le contour du document de votre storyboard, cliquez sur la flèche jaune et choisissez «interligne fixe» ou «fin fixe», selon l'emplacement du texte sur votre écran (gauche ou droite). Cela résoudra le problème pour la plupart des problèmes.
Si vous rencontrez ce problème avec un bouton sans texte (image uniquement), essayez de supprimer le "titre par défaut" qui peut encore être défini pour le bouton:
la source
UIButton
àStoryboard
, ledefault button
titre serabutton
.Avec
Labels
, vous pouvez définirLines
is0
etAutoshrink
propertiesMinimum Font Size
pour supprimer lesFixed Width Constraints May Cause Clipping
avertissements, comme ceci:la source
Une autre solution rapide!
Pour un UIButton en changeant le titre de texte brut en texte attribué a également résolu mon problème: -
la source
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 était d'ajouter la propriété «Rapport d'aspect», puis d'éliminer la contrainte de largeur ou de hauteur, cela fonctionnait plutôt bien et demandait moins d'effort, et j'ai réussi à garder la même sortie et adapter ma vue pour les différents appareils.
la source
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 sa supervision , et en utilisant remove, supérieur à ou d'autres paramètres de début / de fin ne fonctionne la plupart du temps pas correctement. Tout d'abord, vous devez vérifier les bonnes contraintes de votre supervision.
Si votre / vos superview (s) sont correctement définis, vous pouvez essayer "d'expliquer" à votre objet quelle est la position correcte dans la vue en définissant la contrainte "horizontalement dans le conteneur" :
la source
Si vous avez besoin d'une contrainte de largeur fixe pour le bouton, définissez simplement la priorité de la contrainte de largeur sur
700
.la source
J'ai eu le même problème, mais lorsque je le change,
>=
définissez automatiquement la constante sur0
, si je choisis60
par exemple, l'avertissement apparaît à nouveau. J'étais donc dans une boucle avec le problème.Je pourrais réparer l'incorporation de mon
Label
dans unView
Dans l'
Label
ensemble ITop
,Bottom
,Leading
etTrailing
avecconstant = 0
Dans
View
j'ai mis leconstraints
que je m'attendais avant.la source
J'ai eu le même problème lors du passage à 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) étaient de largeur fixe et une autre était de largeur variable. Indépendamment de la façon dont j'ai spécifié les largeurs de colonne (y compris l'utilisation de contraintes supérieures ou égales au lieu d'égales, etc.), je continuais à recevoir un avertissement concernant un écrêtage possible. Dans mon cas, je voulais que la colonne à largeur variable (UILabel) soit coupée si nécessaire. J'aurais pu ignorer l'avertissement, mais je n'aime pas faire ça.
L'approche qui a fonctionné ici était de créer un UIView avec des contraintes de taille appropriées et d'incorporer le UILabel en tant que sous-vue dans l'UIView. Ensuite, la troncature se produit si nécessaire et je n'obtiens aucun avertissement. Cela fonctionne que l'UIView / UILabel incorporé soit dans un StackView ou non.
C'est essentiellement la même approche que celle d'Haroldo Gondim, mais ici vous pouvez voir que cela fonctionne également avec ou sans StackView.
L'image suivante montre l'approche, avec et sans StackView. "SpacerName" est un UIView de largeur variable contenant une étiquette et "SpacerPD" en est un avec une largeur fixe de 80. [Les couleurs ne sont pas significatives; juste là pour montrer où sont les vues.]
la source
Comme vous pouvez le voir dans l'image ci-dessous, j'avais l'erreur «Les contraintes de largeur fixe peuvent provoquer un découpage» car bien que j'avais défini ma zone de texte pour être centrée verticalement et mon étiquette pour avoir une contrainte de marge gauche, je n'avais pas défini de contrainte pour la zone de texte par rapport à l'étiquette, donc XCode m'a alerté que la zone de texte pouvait couper (être rendue au-dessus) l'étiquette.
Après avoir ajouté la contrainte de gauche à la zone de texte pour toujours rester à une certaine distance de l'étiquette, l'erreur a été considérée comme résolue par XCode et cela ne m'a plus dérangé avec l'avertissement de contrainte.
la source
J'ai eu un problème similaire en essayant d'avoir le bouton avec les mêmes rembourrages des bords de la super vue.
J'ai fini par utiliser la
horizontal center
contrainte et laequal widths
contrainte pour lesuper view
.la source
Pour corriger l'erreur : les contraintes de largeur fixe peuvent provoquer un découpage »et autres localisations Vous devez sélectionner la vue / l'objet, aller dans« Afficher l'inspecteur de taille », trouver la contrainte de largeur et définir la constante sur plus grand ou égal à:
Pour corriger l'erreur : la contrainte de début / de 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, 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é
Ajouter une contrainte de début ou de fin
la source