web-dev-qa-db-de.com

Xcode 8. Einschränkungsreferenzelemente in der aktuellen Konfiguration deaktiviert

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.

enter image description here

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:

  • das Projekt gereinigt
  • die abgeleiteten Daten gereinigt
  • löschte alle Einschränkungen und fügte neue hinzu

Irgendwelche Ideen?

16
Danny

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 :)

 Installed is unchecked on a view, not on constraint itself

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

17
AamirR

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:

  • Dass die Bedingung die ID 1ce-xx-Bx5 hat
  • Die Einschränkung ist mit zwei Elementen verknüpft:
  • Man hat die ID von Mwb-6O-DKs
  • Der andere hat die ID von y2M-Sk-Ygh

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

10
jungledev

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

4
Munahil

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

  • Überprüfen Sie die Elemente/Ansichten (erste und zweite) der spezifischen Einschränkung, ob ein Element für eine bestimmte Größenklasse deinstalliert wird. In meinem Fall wurde die Einschränkung für alle Größenklassen installiert, aber eines der Elemente wurde für "wC hR" (Ref folgendes Bild) . installiert enter image description here
  • Installieren Sie das Element, um die Warnung zu beheben.
  • Erstellen Sie nun die App. Wenn Sie immer noch dieselbe Warnung für diese bestimmte Schnittstelle/XIB-Datei finden, machen Sie sich diesmal keine Sorgen. Einige andere Einschränkungen haben dasselbe Problem.

Beratung für die Zukunft

  • Bitte überprüfen Sie, ob Ansichten korrekt installiert sind, während Sie sie von anderen Schnittstellen kopieren/einfügen.
1
Milan Kamilya

Sie können die Ansicht oder Einschränkung auch über das Tag in der Storyboard-Quelle finden. 

  1. Öffne das Storyboard als Quelle 
  2. Suchen Sie nach dem folgenden Tag, um die ID zu erhalten
  3. Suchen Sie nach der ID im Storyboard, um herauszufinden, um welchen Gegenstand es sich handelt. 
1
Maria

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.

1
Ben Thomas

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:

  1. Wenn Sie die Ansicht einfach neu installieren können

  2. Wenn Sie die Ansicht behalten möchten

  3. Wenn Sie die deinstallierte Ansicht einfach alle zusammen löschen können

Option 1

Wenn Sie die Ansicht einfach neu installieren können:

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

  2. 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:

  1. Finden Sie jede Ansicht in Ihrem View Controller-System, die ausgeblendet ist (dh sie wurde deinstalliert).

1  enter image description here 2  enter image description here

  1. Sehen Sie sich die mit der Ansicht verbundenen Einschränkungen an

3  enter image description here

  1. Deaktivieren Sie "Installed"

Die Einschränkung wird nun auch ausgeblendet (nicht die Einschränkungsgruppe), wie im ersten Bild zu sehen.

  1. Bereinigen Sie das Projekt (Befehl + Umschalttaste + K). Wenn dies nicht funktioniert, starten Sie xCode neu. Wenn das nicht funktioniert, haben Sie möglicherweise irgendwo eine Einschränkung verpasst.

Option 3

Wenn Sie die deinstallierte Ansicht einfach alle zusammen löschen können

  1. Löschen Sie alle Ansichten, die deinstalliert wurden, wodurch ihre Einschränkungen automatisch gelöscht werden

  2. Bereinigen Sie das Projekt (Befehl + Umschalttaste + K). Wenn dies nicht funktioniert, starten Sie xCode erneut.

0
chris

Die Lösung bestand nur darin, die deinstallierten Ansichten zu löschen. So einfach ist das.

0
Suhaib