Xcode Storyboard-Warnung: Einschränkung, die auf Elemente verweist, die in der aktuellen Konfiguration deaktiviert sind. Deaktivieren Sie diese Einschränkung in der aktuellen Konfiguration

146

Diese Warnung tritt in Xcode 6.1 auf. Hat jemand Ideen, was diese Warnung bedeutet und was damit passieren wird? Danke vielmals!

Unten sehen Sie einen Screenshot mit den im Quellcode geöffneten Warnungen. "

Geben Sie hier die Bildbeschreibung ein

Wie finde ich heraus, welche Einschränkung die Warnung verursacht? Xcode sagt Ihnen nicht, welche Einschränkung das Problem ist.

Geben Sie hier die Bildbeschreibung ein

Zhihao Yang
quelle
@wumm ja, die App kann erfolgreich erstellt und ausgeführt werden. Ich mache mir nur Sorgen, dass einige potenzielle Probleme irgendwie auftreten könnten, die ich noch nicht kennengelernt habe.
Zhihao Yang
7
Beachten Sie, dass dieses Problem im Allgemeinen verursacht wird durch: Sie haben ein Element, das nicht installiert ist, aber Einschränkungen aufweist, die noch installiert sind. Suchen Sie im Allgemeinen das nicht installierte Element und markieren Sie es für alle Einschränkungen als nicht installiert.
Fattie
@Fattie Bitte bearbeiten Sie die akzeptierte Antwort mit diesem Hauptgrund. Danke
Milan Kamilya

Antworten:

431

Diese Warnung kann ärgerlich sein und tritt ab Xcode 6.1.1 auf. Das Hauptproblem besteht darin, dass Sie die referenzierte Einschränkung nicht einfach finden können, indem Sie auf die Warnung klicken. Ich denke, das ist ein Fehler und wird früher oder später behoben.

In der Zwischenzeit können Sie jedoch diese kleine Problemumgehung verwenden:

Schritt 1: Störende Warnung erkennen 😱

Ärgerliche Warnung

Schritt 2: Rechts- / Strg-Klick auf Warnung, wählen Sie Reveal in Log😨

Geben Sie hier die Bildbeschreibung ein

Schritt 3: Bewundern Sie die Schönheit des folgenden Protokollausschnitts:

... 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 ... Was ist das ...?

interessant

Schritt 4: Lassen Sie uns das in die Projektsuchleiste werfen ... 😐

Suche

😮 Ja, du hast richtig geraten. Klick es.

Schritt 5: 😁 OMG! Genießen Sie ein paar Minuten mehr Produktivität, bis Apple diesen lästigen Fehler behoben hat. 😎

wheeee


Für 2016 ...

  • Wenn Sie es mit "Im Protokoll anzeigen" nicht erhalten können, zeigen Sie den Berichtsnavigator an. (Dies ist die Registerkarte ganz rechts in der Spalte ganz links.) Sehen Sie sich dort die Build-Ergebnisse an. Daraufhin wird das Build-Protokoll einschließlich der Einschränkungs-ID angezeigt. Höflichkeit gebaut

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

  • Beachten Sie, dass Sie für Xcode von 5/2016 ärgerlicherweise Xcode beenden und neu starten müssen , um diese Warnung in einigen Fällen zu löschen.

  • Beachten Sie, dass derselbe Fehler verwirrenderweise durch ein nicht verwandtes Problem verursacht werden kann (dies scheint ein Apple-Fehler oder eine schlechte Verwendung der Fehlersprache zu sein): Wenn Sie IBInspectableElemente haben und diese zufällig in Ihren Swift-Dateien umbenennen . Xcode ist nicht löschen Sie die alten Namen UserDefinedRuntimeAttributes für Sie. Klicken Sie einfach auf "Identity Inspector" (Punkt 3 im rechten Bereich) und löschen Sie die Blindgänger.

Für 2017 ...

  • Eine weitere häufige und in der Tat einfachere Ursache des Problems. Wenn Sie ein Element deinstalliert haben : Zum Zeitpunkt des Schreibens weiß Xcode nicht, dass automatisch auch alle Einschränkungen deinstalliert werden, die zu diesem Element führen . Schauen Sie sich ganz einfach nicht installierte Elemente an und markieren Sie sie für alle Einschränkungen als nicht installiert. (Oder einfach, vielleicht nur vorübergehend das nicht installierte Element ganz löschen, um zu sehen, ob das das Problem ist.)
BastiBen
quelle
28
Diese Erklärung war erstaunlich. Danke dir!
Thomasmalt
7
Meine Lieblingsantwort der Woche :) Und sehr nützlich. Vielen Dank!
5hrp
5
Ich denke, Emojis sollten von nun an für Antworten erforderlich sein.
James Webster
3
Was ist, wenn Reveal in Log wie in meinem Fall ausgegraut ist?
Bakalolo
6
Mein Rechtsklick -> Protokoll anzeigen hat
terrigenus
39

Diese Nachricht wird ausgelöst, wenn Sie eine Ansicht in Ihrem Storyboard deaktiviert haben, die auf dieser Ansicht basierenden Einschränkungen jedoch nicht deaktiviert haben.

Sie haben beispielsweise eine Schaltfläche deaktiviert, aber mit dieser Schaltfläche sind noch einige Einschränkungen verknüpft. Dies kann eine intrinsische Einschränkung wie Höhe oder Breite oder eine relative Einschränkung wie der Abstand zu einer anderen Ansicht sein.

Sie müssen alle Einschränkungen, die auf die Ansicht verweisen, deaktivieren und manuell ausführen. Xcode ist hier überkonservativ und wird es nicht für Sie tun.

KPM
quelle
4
Danke für Ihre Antwort! Könnten Sie genauer sagen, was "Deaktivieren einer Ansicht" ist? Ist es eine Ansicht zu löschen (wie eine Schaltfläche)? aber da ich es bereits gelöscht habe, könnte die Einschränkung auch gelöscht und nicht gefunden werden? Und wie kann man die Einschränkung detaillierter deaktivieren, einfach auswählen und löschen? Vielen Dank!
Zhihao Yang
2
Wenn eine Ansicht in Interface Builder für ihre aktuelle Größenklasse nicht als "Installiert" markiert ist, ist sie deaktiviert.
DivideByZer0
Ich habe viele ViewController in meinem Storyboard. ¿Woher weiß ich, welche eine nicht installierte Unteransicht hat?
Jobima
Sie können mit der rechten Maustaste auf die Warnung klicken und die Option "Quellcode" auswählen. Dort sollten Sie die Hierarchie der entsprechenden Ansicht im respektierten Ansichts-Controller deutlich sehen.
ZaEeM ZaFaR
15

Diese Lösung funktioniert bei mir.

Da ich mehrere Elemente aus dem in Xcode 5 entwickelten Projekt in Xcode 6 kopiert habe und das Storyboard in Xcode 6 mehrere Layouts unterstützt, muss ich es für jede Einschränkung in der aktuellen Konfiguration installieren.

Zum Beispiel verwende ich "Kompakte Breite | Normale Höhe" für die Einschränkung, die ich wie folgt festlegen muss:

Geben Sie hier die Bildbeschreibung ein

Nachdem ich alle Hunderte von Einschränkungen in meinen Projekten überprüft und festgelegt, bereinigt und erstellt habe, verschwinden die Warnungen endgültig.

Zhihao Yang
quelle
1
Beachten Sie, dass InstalledIhre Ansichtsobjektattribute auch diese lästigen Kontrollkästchen enthalten. Stellen Sie daher sicher, dass für die Ansichtsobjekte, von denen Sie glauben, dass sie angezeigt werden, das richtige Kontrollkästchen aktiviert ist. Die Warnung weist Sie darauf hin, dass einige Objekte nicht in der angezeigt werden current configuration.
Matt
Das hat auch bei mir funktioniert. XCode sagte, ich hätte 12 oder 13 Warnungen, aber als ich im Protokoll nach einer von ihnen suchte, zeigte sich, dass es mindestens 100 gab. Also ging ich jede durch, fügte für jede Einschränkung eine wChR hinzu und deaktivierte dann das generische 'Installed'. Warnungen sind verschwunden!
Andreas
Oh, vergessen zu erwähnen. Ich habe ungefähr zur Hälfte festgestellt, dass Sie diesen Prozess tatsächlich für mehrere Einschränkungen gleichzeitig ausführen können, indem Sie sie gleichzeitig auswählen.
Andreas
8

Ich wollte nur meinen Fall hinzufügen, wie dieser Fehler bei mir aufgetreten ist: In meinem Fall wollte ich ein Textfeld mit "Cmd + Rücktaste" löschen. Ich habe dies direkt in der Scene-Builder-Baumansicht gemacht:

Geben Sie hier die Bildbeschreibung ein

Sie können sehen, dass das Schlummerfeld ausgegraut ist.

Das war für mich also leicht zu entdecken. Sie können das Feld dann einfach löschen, indem Sie Folgendes auswählen:

Bearbeiten-Löschen aus dem Menü

Überraschenderweise wird dadurch das Feld (einschließlich der Einschränkungen) wirklich gelöscht. Vielleicht hilft dies jemandem, die Ursache dieser nervigen Warnung leicht zu finden ...

Dolch
quelle
Dies beantwortet die Frage nicht wirklich. Wenn Sie eine andere Frage haben, können Sie diese stellen, indem Sie auf Frage stellen klicken . Sie können auch ein Kopfgeld hinzufügen, um mehr Aufmerksamkeit auf diese Frage zu lenken, sobald Sie genug Ruf haben . - Aus dem Rückblick
Martin Evans
3
Auf diese Weise kann die gestellte Frage behoben werden. Also wollte ich dies nur hinzufügen, um anderen zu helfen ...
Dirk
Danke, sehr hilfreich
Ahmed Elashker
Diese Antwort hat eingegrenzt, wie das Problem gefunden und behoben werden kann. Es hat bei mir funktioniert!
Lance Samaria
6

Erweiterte Erklärung

An den anderen Antworten ist nichts auszusetzen. Ich wollte nur auf den Wortlaut in der ursprünglichen Warnung aufmerksam machen und einige Anwendungsfälle identifizieren, in denen dies im eigenen Workflow auftreten kann.

Einschränkungswarnung

Elemente, die auf Einschränkungen verweisen, sind in der aktuellen Konfiguration deaktiviert.

Dies bedeutet, dass ein Element (normalerweise ein Steuerelement oder eine benutzerdefinierte Ansicht, das normalerweise sichtbar ist), auf das in einer oder mehreren Einschränkungen verwiesen wird, deaktiviert ist (deaktiviert oder das Kontrollkästchen "installiert" deaktiviert). Wenn Sie beispielsweise entscheiden, dass Sie ein Steuerelement oder eine Ansicht in Ihrem Storyboard außerhalb der Hauptansicht verschieben möchten (oder manchmal, wenn Sie in Größenklassen etwas Interessantes tun), wird diese Warnung möglicherweise angezeigt, wenn dem Steuerelement Einschränkungen zugeordnet sind .

deinstallierte Kontrolle

Zusammen mit der empfohlenen Lösung:

Deaktivieren Sie diese Einschränkung in der aktuellen Konfiguration.

Zwei Lösungsansätze

Dokumentübersicht

Visuell können Sie die Dokumentkontur in Ihrem Storyboard öffnen und nach abgeblendeten Einschränkungen suchen, die auf Ihr Steuerelement / Ihre Ansicht außerhalb der Hauptansicht verweisen (erweitern Sie die Kontur, klicken Sie auf die Einschränkung und zeigen Sie den Attributinspektor an, und klicken Sie mit der Maus nach unten, um sie schnell zu überprüfen). . Entfernen Sie dann die Einschränkung aus diesem Kontext (Größenklasse). In meinem Fall halte ich beispielsweise das Steuerelement nur, bis ich später entscheide, wo es präsentiert werden soll, und habe mich daher entschlossen, die betreffende Einschränkung bis später vollständig zu löschen. In einer Größenklasse würde ich die Einschränkung jedoch einfach über das installierte Kontrollkästchen im Attributinspektor aus dem aktuellen Kontext deinstallieren.

Log Navigator / Find Tool

Sie können den Protokollnavigator auch weiterhin verwenden, um die Problemsteuerung über die eindeutige Kennung zu finden, die jedem Objekt im Storyboard zugewiesen wurde. Im Protokoll befindet es sich kurz vor dem gelb hervorgehobenen Text und hat normalerweise die in meinem obigen Beispiel gezeigte Form: jvj-mY-DHf

Mit dem Bezeichner kann man dann das Suchwerkzeug in Xcode verwenden, um die betreffende Einschränkung zu suchen und (vollständig) zu löschen oder (für den aktuellen Kontext) zu deinstallieren.

Log-Navigator

Wenn Sie Xml und seine Einfachheit mögen, können Sie das Storyboard auch einfach als Quellcode öffnen, die fehlerhafte eindeutige Kennung suchen und den entsprechenden XML-Block löschen.

Tommie C.
quelle
1

Einer der Gründe, warum dies passieren kann, ist, dass Sie eine Größenklasse ausgewählt haben, die nicht mit Ihren Einschränkungen kompatibel wAny hAnyist (dies ist ein häufiger Fall). Wählen Sie in diesem Fall einfach eine andere Größenklasse in Interface Builder aus und Sie sind fertig.

Jano
quelle
1

Für mich passiert es, wenn ich einem Objekt eine neue Einschränkung für ein Objekt (keine Ansicht) setze, wobei die Option "Auf Ränder beschränken" nicht aktiviert ist. Problem gelöst mit Häkchen bei der Option (Standardeinstellung).

Ryde
quelle
1

Was für mich funktioniert hat (und ich habe keine Ahnung warum), ist, "Use Trait Variations" auszuschalten, dann eine Bereinigung durchzuführen und sie dann wieder einzuschalten. Der nächste Build hatte keine Warnungen.

Um "Trait Variations verwenden" zu deaktivieren, wählen Sie einfach Ihr Storyboard im Projektnavigator aus und wählen Sie dann Dateiinspektor.

Geben Sie hier die Bildbeschreibung ein

Deaktivieren Sie dann einfach "Use Trait Variations", führen Sie die Reinigung durch Drücken von Shift-CMD K durch und schalten Sie die Trait Variationen wieder ein, wenn Sie sie verwenden möchten.

Geben Sie hier die Bildbeschreibung ein

Roller
quelle
Ich denke nicht, dass dies per se "richtig" ist (Einschränkungen verschwinden), aber diese Antwort war hilfreich für mich, denn sobald ich an diesem Schalter herumgespielt und dann die Änderungen auf das letzte Commit zurückgesetzt habe, würde Xcode alle alten / falschen aktualisieren Ich habe bereits Warnungen dieser Art behoben. Es scheint, dass Xcode häufig alte, bereits festgelegte Warnungen anzeigt - ein Neustart von Xcode würde mir normalerweise nicht helfen. Das Umlegen dieses Schalters + Wiederherstellen auf das letzte Commit scheint die nächste "echte" Warnung dieser Art anzuzeigen. Wenn Sie darauf klicken, wird automatisch die problematische Einschränkung in IB ausgewählt.
Jonny
0

Ich dachte, es sei aufgrund der anderen Antwort eine anhaltende Einschränkung, aber es lag an einem "Outlet", das ich noch für einen Artikel hatte, den ich zuvor gelöscht hatte. Was zu tun ist:

  1. Wählen Sie Ihren ViewController aus
  2. Klicken Sie oben rechts auf das Symbol "Steckdose"
  3. Durchsuchen Sie Ihre Verkaufsstellen und löschen Sie sorgfältig alle nicht benötigten

Im schlimmsten Fall löschen Sie alle Ihre Steckdosen und schließen sie einfach wieder an. Fall gelöst!

Lacht
quelle
0

Wie in der Antwort von @ BadCat erwähnt und gut geführt , folgte ich den Schritten und nur noch einem Schritt, den ich zu wagen wagte!

Schritte nach dem letzten Schritt von BadCats Antwort zu tragen:

Schritt 1:

Ich habe die Einschränkung im Interface Builder ausgewählt und dann berücksichtigt, wofür sie gedacht ist, und sie dann gelöscht.

Schritt 2

Erstellen Sie das XCode-Projekt und es wird angezeigt, dass möglicherweise die Anzahl der Warnungen erhöht wurde. Das liegt daran, dass Sie eine Einschränkung gelöscht haben, die gut kompiliert werden muss. Fahren Sie also mit dem 3. Schritt fort!

Schritt 3

Fügen Sie die Einschränkung, die Sie beachtet haben (die Sie gelöscht haben), erneut hinzu. Und dann wieder aufbauen!

Für mich gingen die Warnungen einfach dadurch weg! Ich denke, das wird für einige Leute klappen!

Ursache:

Da ich das Problem verstehen konnte, das zu dieser Warnung führte, hatte ich ein Label mit einem IBOutlet verbunden, aber sein Name begann mit einem Großbuchstaben. Also habe ich es mit einem einfachen Buchstaben im ViewController umbenannt und bin gekommen, um es im IB zu ändern. Ich entfernte mich an IBOutlet vorbei und verband es mit dem neu umbenannten Eigenschaftsnamen und verband es. Dann bemerkte ich, dass eine neue Warnung auftaucht.

Zuerst habe ich auch die folgende Antwort in diesem Thread versucht , aber es hat nicht geholfen!

Prost!

Randika Vishman
quelle
0

Mein Fall ist, Beschriftung zu wählen und dann auf Strg + X zu klicken. Es wird deaktiviert, aber ich mache nichts damit. Wenn ich baue, wird eine Warnung angezeigt. Lösung: Entfernen Sie das Etikett oder entfernen Sie das ausgewählte Steuerelement + X für das Etikett.

Duyen Hang Kim
quelle
0

Ich lösche alle diese UI-Elemente einschließlich ihrer Einschränkungen und füge sie alle wieder hinzu. Diese Warnungen verschwinden einfach. Auf jeden Fall ist dies ein schlechter, aber nützlicher Weg, um dies zu lösen.

Altes
quelle
0

Ich hatte das Problem in einer Stapelansicht. Das Löschen und erneute Hinzufügen der Einschränkungen hat nicht geholfen. Reinigung und Wiederaufbau haben nicht geholfen.

Für mich bestand die Lösung darin, ein völlig neues Stapelansichtsobjekt zu erstellen.

Verschieben Sie dann alle Elemente aus der alten Stapelansicht in die neue Stapelansicht.

Das Löschen der alten Stapelansicht hat das Problem behoben.

George Filippakos
quelle