Nach dem Update auf Xcode 8 bin ich mit dem Problem konfrontiert worden. Jedes Mal, wenn UI-Objekte vom Haupt-Storyboard gelöscht werden, erhalte ich die folgende Warnung:
In der aktuellen Konfiguration wurde die Einschränkungsreferenzelemente deaktiviert. Deaktivieren Sie diese Einschränkung in der aktuellen Konfiguration.
Es sieht so aus, als wäre dies ein Xcode-Fehler, aber ich möchte diese Warnungen trotzdem aus dem Projekt entfernen. Ich habe festgestellt, dass es das gleiche Problem mit Xcode 6 hier gab, aber keine Antwort auf diese Frage behebt das Problem richtig. Wenn ich also die falsche Einschränkung im Storyboard finde und lösche, nimmt die Anzahl der falschen Beschränkungen zu, anstatt abzunehmen. Ich habe Dinge, die ich auch ausprobiert habe:
Irgendwelche Ideen?
Ich hatte mehrere Ansichten, die nicht Installed
waren. Nach dem Update auf Xcode 8.1 hatte ich 2 Warnungen.
Folgende Schritte haben für mich gearbeitet:
1) Reinigen Sie das Projekt und starten Sie Xcode erneut. Die Warnungen wurden auf 1 verringert.
2) Wenn Sie die Warnung auswählen, wird genau angezeigt, welche Einschränkung ein Problem aufweist. Öffnen Sie Attributes Inspector
und wählen Sie die Ansichten aus, für die die Einschränkung angewendet wird. Suchen Sie nach Installed
, wenn sie in der Ansicht nicht markiert ist (nicht bei der Einschränkung). Sie können entweder select Installed in der Ansicht auswählen oder die Option Installed on constraint selbst deaktivieren.
Siehe Screenshot unten. Installed
war in der Ansicht nicht markiert, nicht in der Einschränkung, auf die die Warnung verwiesen hat :)
Update: Gleiches Problem erneut mit einem anderen ViewController, ein UIView wurde nicht für eine Größenklasse installiert. Ich entferne die Option Installed on constraint selbst und die Warnung ist ebenfalls nicht mehr vorhanden und Constrarint
Die kurze Antwort: Überprüfen Sie den Quellcode für Ihr Storyboard auf jede der IDs in Ihren Warnungen, indem Sie nach 'id = " theIdFromWarning" suchen. Die IDs sind für die Einschränkungen . Wenn Sie die Constraint-ID finden, verweist sie auf die beiden Element-IDs. Suchen Sie nach den Elementen, indem Sie nach 'id = " theIdForElement " suchen. Dann finden Sie den Namen oder eine Information, die im Quellcode des Elements zu finden ist herauszufinden, welches Element Sie betrachten. Wechseln Sie dann vom Quellcode zurück zum Interface Builder, suchen Sie die beiden Elemente und ermitteln Sie, in welcher Größenklasse die zugehörige Einschränkung installiert ist, das Element jedoch nicht. Beispiel: ViewA.right kann horizontal auf ViewB.left beschränkt sein, das auf allen Größenklassen installiert ist. ViewA kann jedoch nur auf height = Regular size class installiert werden. Lösung: Installieren Sie ViewA in allen Größenklassen oder deinstallieren Sie die Einschränkung in allen Größenklassen und fügen Sie die Einschränkung nur der Größenklasse height = Regular hinzu.
Längere Antwort, Schritt für Schritt:
Ich konnte nicht leicht erkennen, auf welche Einschränkungen/Elemente sich diese Warnungen bezogen. Ich konnte mit der rechten Maustaste auf die Warnung klicken und "Im Protokoll anzeigen" auswählen. Dies ergab 10 Warnungen in diesem Format:
/my/filepath/to/storyboard:1xe-xx-Bx5: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
Wenn in Ihrem Protokoll keine detaillierte Beschreibung dieser Art angezeigt wird, klicken Sie mit der rechten Maustaste auf einen Protokollverweis auf die Warnung Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
Und wählen Sie Expand all transcripts
Aus. Durchsuchen Sie dann Ihre Protokolldatei nach den Einschränkungsbeschreibungen.
Also öffnete ich mein Storyboard, klickte mit der rechten Maustaste auf die Storyboard-Datei im Projektnavigator und wählte "Als Quellcode anzeigen", suchte nach jeder Einschränkung anhand der aufgelisteten ID (im obigen Beispiel suchte ich nach der ID: 1xe- xx-Bx5) und fand einen Verweis darauf:
<constraint firstItem="Mwb-6O-DKs" firstAttribute="top" secondItem="y2M-Sk-Ygh" secondAttribute="bottom" constant="19" id="1ce-xx-Bx5"/>
Was mir das sagt ist:
Also habe ich den Quellcode nach dem ersten Element anhand der ID durchsucht, indem ich nach id="Mwb-6O-DKs"
Gesucht habe und Folgendes gefunden:
<label ...(truncating for readability sake)...text="Build Label"...(truncating for readability sake)...id="Mwb-6O-DKs">
Dies sagt mir, dass das erste Element ein UILabel
mit dem Titel 'Build Label' ist.
Die Suche nach dem zweiten Element anhand der ID id="y2M-Sk-Ygh"
Ergab Folgendes:
<viewController storyboardIdentifier="login"...(truncating for readability sake)...<layoutGuides><viewControllerLayoutGuide type="top" id="y2M-Sk-Ygh"/>
Ich verstehe das also so, dass das UILabel
mit dem Text "Build Label" eine obere Einschränkung hat, die deaktiviert ist. (Da die Einschränkung viewControllerLayoutGuide
niemals deaktiviert werden sollte, muss es sich um die Einschränkung UILabel
handeln.
Siehe da, es wurde nicht installiert. Ich habe das Kontrollkästchen Installed
für das UILabel aktiviert und der Fehler ist verschwunden.
1 runter, noch 9 runter! (F * ing Xcode ...)
Zeigen Sie den Report Navigator
[Dies ist die ganz rechte Registerkarte in der linken Spalte]. Dadurch wird das Build-Protokoll mit den Constraint-IDs angezeigt. Weitere Details finden Sie in diesem stackoverflow's post .
Grund
Sie haben ein Element (d. H. Ansicht), das nicht installiert ist, es gibt jedoch Einschränkungen, die noch installiert sind. (kommentiert von fattie )
So ermitteln Sie eine bestimmte Einschränkung
Es ist schwierig, genaue Einschränkung zu finden, die diese Warnung verursacht. In BastiBens Antwort wurde schrittweise erwähnt, wie man die spezifische Einschränkung herausfindet.
Lösung
Beratung für die Zukunft
Sie können die Ansicht oder Einschränkung auch über das Tag in der Storyboard-Quelle finden.
Ich hatte die Ansicht, dass ich deinstalliert hatte, also erschien die Warnung. Nach dem erneuten Installieren der Ansicht verschwand die Warnung auch nach einem Reinigen nicht. Nach dem Neustart von Xcode verschwand die Warnung.
Um dieses Problem zu lösen, gibt es einige Möglichkeiten:
Zuerst was verursacht das Problem? Deinstallieren einer Ansicht ohne Deinstallieren der Einschränkungen.
Zweitens warum sollten Sie das so machen? Möglicherweise möchten Sie, dass eine Ansicht in Ihrem Ansichtscontroller verbleibt, weil Sie sie erstellt haben und die Spezifikationen geändert wurden, sodass Sie sie vorübergehend entfernen wollten, weil dieser Teil möglicherweise nicht in Ihrem aktuellen Sprint enthalten war oder was Sie haben
Letzte wie löst man es?
Es gibt drei Möglichkeiten:
Wenn Sie die Ansicht einfach neu installieren können
Wenn Sie die Ansicht behalten möchten
Wenn Sie die deinstallierte Ansicht einfach alle zusammen löschen können
Option 1
Wenn Sie die Ansicht einfach neu installieren können:
Installieren Sie die Ansicht neu, indem Sie die installierte Option wie in Bild 2 umschalten, und zwar für alle Ansichten, die wie in Bild 1 ausgeblendet sind
Bereinigen Sie das Projekt (Befehl + Umschalttaste + K). Wenn dies nicht funktioniert, starten Sie xCode neu. Wenn dies nicht funktioniert, haben Sie möglicherweise eine deinstallierte Ansicht irgendwo verpasst.
Option 2
Wenn Sie die Ansicht beibehalten möchten:
Die Einschränkung wird nun auch ausgeblendet (nicht die Einschränkungsgruppe), wie im ersten Bild zu sehen.
Option 3
Wenn Sie die deinstallierte Ansicht einfach alle zusammen löschen können
Löschen Sie alle Ansichten, die deinstalliert wurden, wodurch ihre Einschränkungen automatisch gelöscht werden
Bereinigen Sie das Projekt (Befehl + Umschalttaste + K). Wenn dies nicht funktioniert, starten Sie xCode erneut.
Die Lösung bestand nur darin, die deinstallierten Ansichten zu löschen. So einfach ist das.