Unten ist die Fehlermeldung, die ich im Debug-Bereich erhalte. Es läuft gut und nichts ist falsch, außer dass ich diesen Fehler erhalte. Würde dies verhindern, dass Apple die App akzeptiert? Wie behebe ich das?
2012-07-26 01:58:18.621 Rolo[33597:11303] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x887d630 h=--& v=--& V:[UIButtonLabel:0x886ed80(19)]>",
"<NSAutoresizingMaskLayoutConstraint:0x887d5f0 h=--& v=--& UIButtonLabel:0x886ed80.midY == + 37.5>",
"<NSAutoresizingMaskLayoutConstraint:0x887b4b0 h=--& v=--& V:[UIButtonLabel:0x72bb9b0(19)]>",
"<NSAutoresizingMaskLayoutConstraint:0x887b470 h=--& v=--& UIButtonLabel:0x72bb9b0.midY == - 0.5>",
"<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>",
"<NSLayoutConstraint:0x72c2430 UILabel:0x72bfad0.top == UILabel:0x72bf7c0.top>",
"<NSLayoutConstraint:0x72c2370 UILabel:0x72c0270.top == UILabel:0x72bfad0.top>",
"<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>",
"<NSLayoutConstraint:0x72c15b0 V:[UILabel:0x72c0270]-(NSSpace(8))-[UIRoundedRectButton:0x72bbc10]>",
"<NSLayoutConstraint:0x72c1570 UIRoundedRectButton:0x72bbc10.baseline == UIRoundedRectButton:0x7571170.baseline>",
"<NSLayoutConstraint:0x72c21f0 UIRoundedRectButton:0x7571170.top == UIButton:0x886efe0.top>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
ios
objective-c
debugging
nslayoutconstraint
Johnny Cox
quelle
quelle
Antworten:
Ich würde empfehlen, zu debuggen und herauszufinden, welche Einschränkung "die ist, die Sie nicht wollen" . Angenommen, Sie haben folgendes Problem:
Das Problem ist immer, wie man die folgenden Einschränkungen und Ansichten findet.
Hierfür gibt es zwei Lösungen:
Da Sie wissen, wo unerwartete Einschränkungen zu finden sind (PBOUserWorkDayHeaderView), gibt es eine Möglichkeit, dies ziemlich gut zu tun. Lass uns finden
UIView
undNSLayoutConstraint
in roten Rechtecken. Da wir ihre ID im Gedächtnis kennen , ist es ziemlich einfach.Wie Sie sehen können, sind die Speicherzeiger gleich. Wir wissen also, was jetzt los ist. Zusätzlich finden Sie
NSLayoutConstraint
in der Ansicht Hierarchie. Da es in der Ansicht ausgewählt ist, wird es auch im Navigator ausgewählt.Bei Bedarf können Sie es auch mit dem Adresszeiger auf der Konsole drucken:
Sie können dasselbe für jede Einschränkung tun, auf die der Debugger Sie hinweist :-) Jetzt entscheiden Sie, was Sie damit tun möchten.
BESSER DRUCKEN (Ich empfehle diesen Weg wirklich, dies ist von Xcode 7)
NSLayoutConstraint
:SWIFT :
ZIEL C
id
, können Sie sie einfach in Ihrem Find Navigator antippen :WIE MAN DIESEN FALL EINFACH BEHEBT?
999
für gebrochene Einschränkung.quelle
Das Problem, das Sie haben, ist, dass die NSAutoresizingMaskLayoutConstraints nicht vorhanden sein sollten. Dies ist das alte System von Federn und Streben. Führen Sie diese Methode für jede Ansicht aus, die Sie einschränken möchten, um sie zu entfernen:
quelle
Achten Sie darauf , dass Sie nicht mehr als eine Einschränkung in derselben Richtung und in demselben Typ verwenden.
Beispiel: Vertikale Einschränkung für Trailing = 15 und eine andere ist> = 10.
Manchmal erzeugt Xcode einige Einschränkungen, die Sie nicht bemerken . Sie müssen redundante Einschränkungen beseitigen, und die Protokollwarnung wird mit Sicherheit verschwinden.
Darüber hinaus können Sie bestimmte Gründe direkt aus dem Protokoll lesen und erkennen :
Dies können wir als Problem in der UILabel-Einschränkung lesen. Die führende vertikale Einschränkung ist 15pt lang.
Dies wäre eine nachlaufende horizontale Einschränkung usw.
quelle
Ich hatte eine ganze Reihe dieser Ausnahmen ausgelöst. Der schnellste und einfachste Weg, sie zu lösen, bestand darin, eindeutige Werte in den Ausnahmen zu finden, nach denen ich dann im Storyboard-Quellcode gesucht habe. Dies hat mir geholfen, die tatsächlichen Ansichten und Einschränkungen zu finden, die das Problem verursachen (ich verwende aussagekräftige userLabels für alle Ansichten, wodurch es viel einfacher ist, die Einschränkungen und Ansichten zu verfolgen) ...
Mit den oben genannten Ausnahmen würde ich das Storyboard als "Quellcode" in xcode (oder einem anderen Editor) öffnen und nach etwas suchen, das ich finden kann ...
.. dies sieht aus wie eine vertikale (V) Einschränkung für ein UILabel mit einem Wert von (17).
Wenn ich die Ausnahmen durchschaue, finde ich auch
Das UILabel (0x72bf7c0) befindet sich in der Nähe eines UIButton (0x886efe0) mit einem vertikalen Abstand (8).
Das wird hoffentlich ausreichen, um die spezifischen Ansichten im Storyboard-Quellcode (wahrscheinlich durch anfängliches Durchsuchen des Textes nach "17") oder zumindest einige wahrscheinliche Kandidaten zu finden. Von dort aus sollte ich in der Lage sein, tatsächlich herauszufinden, welche Ansichten sich diese im Storyboard befinden, wodurch es viel einfacher wird, das Problem zu identifizieren (suchen Sie nach "doppeltem" Pinning oder Pinning, das im Widerspruch zu Größenbeschränkungen steht).
quelle
Es fiel mir schwer herauszufinden, welche Einschränkungen diesen Fehler verursachten. Hier ist eine einfachere Möglichkeit, dies zu tun.
Ich benutze Xcode 6.1.1
quelle
Ich hatte dieses Problem, weil meine
.xib
Dateien Autolayout verwendeten.Im Dateiinspektor die erste Registerkarte. Durch Deaktivieren von "Autolayout verwenden" wurde das Problem behoben.
quelle
UIImageView
hat sich Ihre Position geändert. Sie müssen diese Position entweder programmgesteuert oder über den Interface Builder erneut festlegen.Hier ist meine Erfahrung und Lösung. Ich habe den Code nicht berührt
quelle
Verwenden Sie schnell diesen Code
quelle
Ich habe SO Fragen und Antworten von jeder Suchanfrage verfolgt. Aber sie sind alle mit einem bestimmten verwandt.
Grundsätzlich meine ich, bevor Sie ein Format aufschreiben (möglicherweise ein einfaches), werden Sie gewarnt.
Ab iOS 8.0 sind Ansichten standardmäßig Größenklassen. Selbst wenn Sie Größenklassen deaktivieren, enthält es einige Einschränkungen für das automatische Layout.
Wenn Sie also planen, Einschränkungen mithilfe von VFL über Code festzulegen. Dann müssen Sie sich um eine unter der Zeile kümmern.
Ich hatte viel in SO gesucht, aber die Lösung lag im Apple Sample Code .
Sie müssen also die Standardeinschränkungen entfernen, bevor Sie neue hinzufügen möchten.
quelle
Für mich war der Hauptgrund für dieses Problem, dass ich vergessen habe, das Kontrollkästchen
AutoLayout
imXib
Editor zu deaktivieren . Tatsächlich habe ich viele Anpassungen amXIB
In-Code vorgenommen.quelle
Dies hat mir geholfen, die Ansicht zu erfassen, die das Problem verursacht hat.
quelle
Keine der vorstehenden Antworten ist in meiner Situation hilfreich. Ich verwende XCode 10.1 und teste meine App auf dem Simulator für ein "iPad (5. Generation)". Auf dem Simulator wird iOS 12.1 ausgeführt.
Ich habe eine einfache Stammansicht in meinem Storyboard mit zwei UITextField-Unteransichten. Im Storyboard werden überhaupt keine Einschränkungen verwendet. Und ich habe keine UIButtonBarView-Objekte in der App oder im Storyboard.
Beim Starten der App und beim Auslegen der Stammansicht werden keine Nachrichten gedruckt. Keine, wenn das simulierte Gerät gedreht wird.
Sobald ich im Simulator auf eines der Textfelder klicke, wird die Tastaturerweiterung am unteren Bildschirmrand angezeigt, jedoch nicht die vollständige Tastatur, die im Simulator nie angezeigt zu werden scheint. Auf dem Terminal ist jedoch Folgendes ausgedruckt:
Es scheint mir, dass all dies nichts mit meiner App zu tun hat und alles damit, wie Apple seine eigene Tastaturansicht erstellt, selbst wenn meine kleine Erweiterung als damit kombiniert deklariert ist.
Es bleibt also die Frage, ob ich als App-Entwickler für etwas verantwortlich bin (unter der Annahme, dass dies eine Reihe von Dingen ist, die es wert sind, behandelt zu werden), oder ob es nur Apples eigenes Problem / Fehler ist.
FWIW, diese Einschränkungsproblemmeldung tritt nicht auf, wenn ein neueres iPad-Modell wie das iPad Pro 12,9 Zoll (3. Generation) simuliert wird. Die Meldung wird jedoch angezeigt, wenn ein iPad Pro 9,7-Zoll simuliert wird. Alle behaupten, iOS 12.1 auszuführen.
quelle
Ich erhalte den gleichen Fehler, jedoch nur in einer bestimmten Ansicht, wenn ich das erste Textfeld und dann das nächste Textfeld nach unten berühre.
Ich schreibe in SwiftUI für iOS 13.4
quelle
Ich hatte auch das gleiche Problem mit dem Aufheben von Einschränkungen im Protokoll für einen viewCircle in der xib. Ich habe fast alles versucht, was oben aufgeführt ist, und nichts hat für mich funktioniert. Dann habe ich versucht, die Priorität der Höhenbeschränkung zu ändern, die im Protokoll unterbrochen wurde (bestätigt durch Hinzufügen eines Bezeichners für die Einschränkungen auf der xib). Geben Sie hier die Bildbeschreibung ein
quelle
Eine Sache, auf die ich achten sollte (zumindest hat mich das gestolpert), war, dass ich die Einschränkung aus der falschen Sicht entfernte. Die Einschränkung, die ich entfernen wollte, war aus meiner Sicht keine untergeordnete Einschränkung, als ich dies tat
Es wurde eigentlich nichts entfernt, weil ich anrufen musste
da die Einschränkung meiner Ansicht nach technisch geschwisterliche Einschränkung war.
quelle
schnell 4
Ich füge diese Zeile einfach in viewDidLoad hinzu und arbeite gut mit mir.
quelle