Avertissement Xcode Storyboard: les éléments de référence de contrainte sont désactivés dans la configuration actuelle. Désactivez cette contrainte dans la configuration actuelle

146

Cet avertissement se produit dans Xcode 6.1. Quelqu'un a-t-il une idée de ce que signifie cet avertissement et que va-t-il se passer? Merci beaucoup!

Ci-dessous, une capture d'écran avec les avertissements ouverts dans le code source "

entrez la description de l'image ici

Comment trouver quelle contrainte provoque l'avertissement? Xcode ne vous dit pas quelle contrainte est le problème.

entrez la description de l'image ici

Zhihao Yang
la source
@wumm oui, l'application peut être créée et exécutée avec succès, je crains juste qu'un ou plusieurs problèmes potentiels puissent survenir d'une manière ou d'une autre, que je n'ai pas encore rencontrés.
Zhihao Yang
7
Notez qu'en général, ce problème est causé par: vous avez un élément qui n'est pas installé, mais il a des contraintes qui sont toujours installées. En général, recherchez l'élément non installé, et pour toutes ses contraintes, marquez-le comme non installé.
Fattie
@Fattie Veuillez modifier la réponse acceptée avec cette raison principale. Merci
Milan Kamilya

Réponses:

431

Cet avertissement peut être ennuyeux et se produit à partir de Xcode 6.1.1. Le problème principal est que vous ne pouvez pas trouver facilement la contrainte référencée en cliquant sur l'avertissement. Je suppose que c'est un bogue qui sera corrigé tôt ou tard.

Cependant, en attendant, vous pouvez utiliser cette petite solution de contournement:

Étape 1: Détectez les avertissements ennuyeux 😱

Avertissement ennuyeux

Étape 2: clic droit / Ctrl-clic sur l'avertissement, sélectionnez Reveal in Log😨

entrez la description de l'image ici

Étape 3: Admirez la beauté de l'extrait de journal suivant:

... snip ...
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Dlb-cb-nWC: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:6Ze-mO-v5N: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:9av-xw-u1o: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:RPt-Uf-vaZ: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Rnc-4M-7jV: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:epJ-D9-KEF: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:4HC-Gu-01w: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
... snip ...

Hmmm ... Qu'est-ce que c'est ...?

intéressant

Étape 4: Jetons cela dans la barre de recherche du projet ... 😐

chercher

😮 Oui, vous avez bien deviné. Cliquez dessus.

Étape 5: 😁 OMG! Profitez de quelques minutes supplémentaires de productivité jusqu'à ce qu'Apple corrige ce bug ennuyeux. 😎

wheeee


Pour 2016 ...

  • Si vous ne pouvez pas l'obtenir avec «Révéler dans le journal», affichez le Navigateur de rapports. (C'est l'onglet le plus à droite de la colonne la plus à gauche.) Plongez-vous dans les résultats de la construction. Cela affichera le journal de construction, y compris l'ID de contrainte. construction de courtoisie réussie

entrez la description de l'image ici

entrez la description de l'image ici

  • Notez que pour Xcode de 5/2016, vous devez malheureusement quitter et redémarrer Xcode pour effacer cet avertissement dans certains cas.

  • Notez que de manière déroutante, la même erreur peut être causée par un problème sans rapport (cela semble être un bogue Apple ou une mauvaise utilisation du langage d'erreur): si vous avez des IBInspectableéléments, et que vous les renommez dans vos fichiers Swift. Xcode ne supprime pas l'ancien nom UserDefinedRuntimeAttributes pour vous. Cliquez simplement sur "Inspecteur d'identité" (élément 3 sur le panneau de droite) et supprimez les éléments ratés.

Pour 2017 ...

  • Encore une autre cause commune, et en fait plus simple, du problème. Si vous avez désinstallé un élément: Au moment de la rédaction, Xcode ne sait tout simplement pas désinstaller automatiquement les contraintes menant à cet élément . Tout simplement, regardez tous les éléments non installés, et pour toutes ses contraintes, marquez-les simplement comme non installés. (Ou simplement, peut-être simplement supprimer temporairement l'élément non installé, pour voir si c'est le problème.)
BastiBen
la source
28
Cette explication était incroyable. Je vous remercie!
thomasmalt
7
Ma réponse préférée de la semaine :) Et très utile. Merci!
5hrp
5
Je pense que les emojis devraient être obligatoires dans les réponses à partir de maintenant.
James Webster
3
Que faire si Révéler dans le journal est grisé comme dans mon cas?
bakalolo
6
Mon clic droit -> Révéler le journal ne faisait rien, j'ai donc ouvert les journaux en utilisant ceci comme ref: stackoverflow.com/questions/19014359/...
terrigenus
39

Ce message est déclenché lorsque vous avez désactivé une vue dans votre storyboard, mais que vous n'avez pas désactivé les contraintes basées sur cette vue.

Par exemple, vous avez désactivé un bouton, mais vous avez toujours des contraintes liées à ce bouton. Cela peut être une contrainte intrinsèque comme la hauteur ou la largeur, ou une contrainte relative comme la distance d'une autre vue.

Vous devez désactiver chacune des contraintes référençant la vue, et vous devez le faire manuellement. Xcode est surconservateur ici et ne le fera pas pour vous.

KPM
la source
4
Merci pour votre réponse! Pourriez-vous préciser ce qu'est "une vue désactivée"? Est-ce pour supprimer une vue (comme un bouton)? mais comme je l'ai déjà supprimé, la contrainte pourrait également être supprimée et ne pourrait pas être trouvée? Et comment "désactiver la contrainte" plus en détail, il suffit de la sélectionner et de la supprimer? Merci beaucoup!
Zhihao Yang
2
Si une vue n'est pas marquée comme "Installée" dans Interface Builder pour sa classe de taille actuelle, elle est désactivée.
DivideByZer0
J'ai de nombreux ViewControllers dans mon storyboard. ¿Comment savoir lequel a une sous-vue non installée?
jobima
vous pouvez faire un clic droit sur l'avertissement et sélectionner l'option "Code source". Là, vous devriez voir clairement la hiérarchie de la vue correspondante dans le contrôleur de vue respecté.
ZaEeM ZaFaR
15

Cette solution fonctionne pour moi.

Comme j'ai copié plusieurs éléments du projet que j'ai développé dans Xcode 5 dans Xcode 6 et que le storyboard de Xcode 6 prend en charge plusieurs mises en page, pour chaque contrainte, je dois l'installer dans la configuration actuelle.

Par exemple, j'utilise "Largeur compacte | Hauteur régulière", pour la contrainte que je dois définir comme ci-dessous:

entrez la description de l'image ici

Après avoir vérifié et défini toutes les centaines de contraintes dans mes projets, nettoyées et compilées, les avertissements disparaissent enfin.

Zhihao Yang
la source
1
Notez qu'il existe également ces Installedcases à cocher embêtantes dans vos attributs d'objet de vue. Assurez-vous donc que la case à cocher correcte des objets de vue que vous pensez être affichés est cochée. L'avertissement vous indique que certains objets ne sont pas affichés dans le current configuration.
Matt
Cela a fonctionné pour moi aussi. XCode a dit que j'avais 12 ou 13 avertissements, mais la recherche dans le journal pour l'un d'entre eux a montré qu'il y en avait au moins 100. J'ai donc parcouru chacun d'eux, en ajoutant un wChR pour chaque contrainte, puis en décochant le générique «Installé». Les avertissements ont disparu!
Andreas
Oh, j'ai oublié de mentionner. J'ai réalisé à peu près à mi-chemin que vous pouvez réellement effectuer ce processus pour plusieurs contraintes à la fois en les sélectionnant en même temps.
Andreas
8

Je voulais juste ajouter mon cas comment cette erreur s'est produite pour moi: Dans mon cas, je voulais supprimer un champ de texte avec "Cmd + Backspace". Je l'ai fait directement dans l'arborescence de Scene-Builder:

entrez la description de l'image ici

Vous pouvez voir que le champ snooze est grisé.

Cela a donc été facilement découvert pour moi. Vous pouvez simplement supprimer le champ en sélectionnant:

Modifier-Supprimer du menu

Étonnamment - cela supprime vraiment le champ (y compris les contraintes). Peut-être que cela aide quelqu'un à trouver facilement la cause de cet avertissement ennuyeux ...

Poignard
la source
Cela ne répond pas vraiment à la question. Si vous avez une autre question, vous pouvez la poser en cliquant sur Poser une question . Vous pouvez également ajouter une prime pour attirer davantage l'attention sur cette question une fois que vous avez suffisamment de réputation . - De l'avis
Martin Evans
3
C'est une autre façon de résoudre la question posée. Je voulais juste ajouter ceci pour aider les autres ...
Dirk
Merci, très utile
Ahmed Elashker
Cette réponse a permis de déterminer comment trouver et résoudre le problème. Cela a fonctionné pour moi!
Lance Samaria
6

Explication développée

Rien de mal avec les autres réponses. Je voulais juste attirer l'attention sur le libellé de l' avertissement d'origine et identifier quelques cas d'utilisation où cela peut apparaître dans le flux de travail.

avertissement de contrainte

Éléments de référence de contrainte désactivés dans la configuration actuelle.

Cela signifie qu'un élément (généralement un contrôle ou une vue personnalisée normalement visible) référencé dans une ou plusieurs contraintes est désactivé (désactivé ou a la case à cocher «installé» décochée). Si, par exemple, vous décidez que vous souhaitez déplacer un contrôle ou une vue dans votre storyboard en dehors de la vue principale (ou vous pouvez voir parfois lorsque vous faites quelque chose d'intéressant dans les classes de taille), vous pouvez voir cet avertissement si le contrôle a des contraintes qui lui sont attachées .

désinstallé-contrôle

Avec la solution recommandée:

Désactivez cette contrainte dans la configuration actuelle.

Deux approches pour corriger

Plan du document

Visuellement, vous pouvez ouvrir le plan du document dans votre storyboard et rechercher les contraintes grisées qui font référence à votre contrôle / vue assis en dehors de la vue principale (élargissez le contour, cliquez sur la contrainte et affichez l'inspecteur d'attributs, souris vers le bas pour examiner rapidement) . Supprimez ensuite la contrainte de ce contexte (classe de taille). Par exemple, dans mon cas, je tiens simplement le contrôle jusqu'à ce que je décide plus tard où le présenter, j'ai donc choisi de supprimer complètement la contrainte incriminée jusqu'à plus tard. Mais dans une classe de taille, je désinstallerais simplement la contrainte du contexte actuel en utilisant la case à cocher installée dans l'inspecteur d'attributs.

Navigateur de journaux / outil de recherche

On peut également continuer à utiliser le navigateur de journal pour trouver le contrôle du problème via l'identifiant unique donné à chaque objet sur le storyboard. Dans le journal, ce serait juste avant le texte surligné en jaune et prend généralement la forme comme indiqué dans mon exemple ci-dessus: jvj-mY-DHf

En utilisant l'identifiant, on peut ensuite utiliser l'outil de recherche dans Xcode pour localiser et supprimer (complètement) ou désinstaller (pour le contexte actuel) la contrainte incriminée.

navigateur de journal

Si vous aimez Xml et sa simplicité, vous pouvez également simplement ouvrir le Storyboard en tant que code source et trouver l'identifiant unique incriminé et supprimer le bloc approprié de xml.

Tommie C.
la source
1

Une des raisons pour lesquelles cela pourrait arriver est que vous avez sélectionné une classe de taille non compatible avec vos contraintes ( wAny hAnyc'est un cas courant). Dans ce cas, sélectionnez simplement une classe de taille différente dans Interface Builder et vous avez terminé.

Jano
la source
1

Pour moi, cela arrive si je donne à un objet une nouvelle contrainte sur objet (pas vue) avec l'option "Contrainte aux marges" non cochée. Problème résolu en cochant l'option (qui est par défaut).

Ryde
la source
1

Ce qui a fonctionné pour moi (et je ne sais pas pourquoi) est de désactiver "Utiliser les variations de traits", puis d'effectuer un nettoyage, puis de les réactiver. La prochaine version n'avait aucun avertissement.

Pour désactiver «Utiliser les variations de traits», sélectionnez simplement votre storyboard dans le navigateur de projet, puis sélectionnez l'inspecteur de fichiers.

entrez la description de l'image ici

Ensuite, désélectionnez simplement «Utiliser les variations de trait», effectuez un nettoyage net en appuyant sur Shift-CMD K, puis réactivez les variations de trait si vous souhaitez les utiliser.

entrez la description de l'image ici

Scooter
la source
Je ne pense pas que ce soit "correct" en soi (les contraintes disparaissent), mais cette réponse m'a été utile car dès que j'ai manipulé ce commutateur, puis que j'ai annulé les modifications apportées au dernier commit, Xcode mettrait joliment à jour tout ancien / incorrect / déjà corrigé des avertissements de ce type. Il semble que Xcode afficherait souvent des avertissements anciens et déjà corrigés - le redémarrage de Xcode ne m'aiderait normalement pas. Le basculement de ce commutateur + restauration vers le dernier commit semble montrer le prochain avertissement "réel" de ce genre; cliquer dessus sélectionnerait automatiquement la contrainte problématique dans IB.
Jonny
0

Je pensais que c'était une contrainte persistante en raison de l'autre réponse, mais c'était dû à un `` débouché '' que j'avais encore pour un élément que j'avais supprimé auparavant. Que faire est:

  1. Sélectionnez votre ViewController
  2. Cliquez sur l'icône 'Outlet' en haut à droite
  3. Regardez dans vos prises et supprimez soigneusement celles dont vous n'avez pas besoin

Dans le pire des cas, vous supprimez toutes vos prises et vous les reconnectez. Cas résolu!

Rires
la source
0

Comme mentionné et bien guidé dans la réponse de @ BadCat , j'ai suivi les étapes et juste un pas de plus que j'ai osé franchir!

Étapes à suivre après la dernière étape de la réponse BadCats:

Étape 1:

J'ai sélectionné la contrainte dans Interface Builder, puis en gardant cela à l'esprit à quoi elle sert, puis je l'ai supprimée.

Étape 2

Construisez le projet XCode et il vous montrera peut-être que le nombre d'avertissements est augmenté. C'est parce que vous avez supprimé une contrainte dont il a besoin pour bien se compiler. Alors, passez à la 3e étape!

Étape 3

Ajoutez à nouveau la contrainte que vous avez gardée à l'esprit (celle que vous avez supprimée). Et puis reconstruisez-le à nouveau!

Pour moi, les avertissements sont partis rien qu'en faisant cela! Je suppose que cela fonctionnera pour certaines personnes!

Cause:

Comme je pouvais comprendre le problème qui a causé cet avertissement était, j'avais un Label connecté à un IBOutlet, mais son nom commençait par une majuscule. Je l'ai donc renommé avec une simple lettre dans le ViewController et suis venu le changer dans l'IB. J'ai supprimé IBOutlet passé et suis allé le connecter au nom de propriété nouvellement renommé et connecté. Ensuite, j'ai remarqué qu'il y avait un nouvel avertissement.

J'ai d'abord essayé la réponse suivante dans ce fil, mais cela n'a pas aidé!

À votre santé!

Randika Vishman
la source
0

Mon cas est de choisir le libellé, puis cliquez sur contrôle + X, ce sera désactivé, mais je ne fais rien avec. Lorsque je construis, il affichera un avertissement. Solution: supprimer l'étiquette ou supprimer le contrôle choisi + X pour l'étiquette.

Duyen Hang Kim
la source
0

Je supprime tous ces éléments de l'interface utilisateur, y compris leurs contraintes, et les ajoute à nouveau, ces avertissements disparaissent tout simplement. Quoi qu'il en soit, c'est la pire façon mais utile de résoudre ce problème.

Le vieux
la source
0

J'ai eu le problème sur une vue de pile. Supprimer les contraintes et les rajouter n'a pas aidé. Le nettoyage et la reconstruction n'ont pas aidé.

Pour moi, la solution était de créer un tout nouvel objet de vue de pile.

Déplacez ensuite tous les éléments de l'ancienne vue de pile vers la nouvelle vue de pile.

La suppression de l'ancienne vue de la pile a résolu le problème.

George Filippakos
la source