2015-09-15 6 views
5

Ich habe alle SO Fragen gelesen, die dem ähnlich sind und ich bin so verloren. Ich erhalte die folgende Fehlermeldung:Über welche Layoutbeschränkung spricht man?

2015-09-14 22:59:40.455 guess-who[60143:9602686] 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) 
(
    "<NSLayoutConstraint:0x7c0f8e30 UIImageView:0x7b6efb60.top == _UILayoutGuide:0x7c0f67a0.top>", 
    "<_UILayoutSupportConstraint:0x7c0f8ae0 V:[_UILayoutGuide:0x7c0f67a0(0)]>", 
    "<_UILayoutSupportConstraint:0x7c0f0070 _UILayoutGuide:0x7c0f67a0.bottom == UIView:0x7c0f65e0.bottom>", 
    "<NSAutoresizingMaskLayoutConstraint:0x7b6f6130 h=--& v=--& UIImageView:0x7b6efb60.midY == + 204>", 
    "<NSAutoresizingMaskLayoutConstraint:0x7b6f6160 h=--& v=--& V:[UIImageView:0x7b6efb60(220)]>", 
    "<NSLayoutConstraint:0x7b6f6dc0 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7c0f65e0(518)]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x7b6f6e20 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x7c0f65e0] (Names: '|':UIView:0x7c0effc0)>" 
) 

Will attempt to recover by breaking constraint 
<_UILayoutSupportConstraint:0x7c0f0070 _UILayoutGuide:0x7c0f67a0.bottom == UIView:0x7c0f65e0.bottom> 

ich dies für eine Reihe von anderen Einschränkungen bekommen habe, die ich erfolgreich gelöst haben, aber dieses mich stumping. Ich weiß nicht, was ein UILayoutSupportConstraint ist; Die Dokumentation ist nicht sehr gründlich. Ich habe durch den View-Debugger geschaut und UIView:0x7c0f65e0 scheint sich auf meine Hauptansicht zu beziehen (obwohl es das Kind einer leeren Ansicht ist, aus irgendeinem Grund?). Ich bin nicht in der Lage, etwas mit 0x7c0f67a0 zu finden, obwohl sich das auf den LayoutGuide zu beziehen scheint, da ihre Unterseiten gleich sein müssen. Ich bin mir nicht sicher, welche anderen Werkzeuge mir zur Verfügung stehen, um das herauszufinden.

EDIT:

der Ansicht Debugger, ich habe es verengt auf eine dieser beiden Bedingungen ab, von denen keiner weiß, dass ich die Quelle:

enter image description here

kann ich nicht Finde heraus, wo einer dieser Punkte gesetzt wird. Ich weiß, dass jeder erste Vorschlag darin besteht, translateAutoresizingMaskIntoConstraints auf false zu setzen, aber das zerstört mein gesamtes Layout und ich weiß nicht, wie ich es beheben soll.

+0

Kann ich Ihr gesamtes Projekt sehen? Es geht um das automatische Layout. –

+0

Was soll ich konkret zeigen? – thumbtackthief

+0

Ihr Storyboard. Drücken Sie es auf Github Repo, damit ich Ihnen die Pull-Anfrage senden kann. –

Antwort

-4

Verwenden Sie diese folgende Zeile. Es kann dir helfen.

[view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
+0

Ich habe es versucht (nun, das Swift-Äquivalent) und es hat mein gesamtes Layout total durcheinander gebracht. – thumbtackthief

+2

Dies beantwortet die Frage nicht, es sollte ein Kommentar sein. – JAL

+0

Plus es hilft nicht, und ist in Obj-C. – thumbtackthief

2

Deaktivieren translatesAutoresizingMaskIntoConstraints Wracks Ihr Layout, weil einige Ihrer gestapelten Elemente haben keine explizite Höhe/Breite Satz (PlayAgain, Katze, Rahmen) und der Bildinhalte basiert.

Ihr Beispielprojekt kann nicht sofort ausgeführt werden, daher kann ich das Laufzeitlayout nicht überprüfen. Ich würde jedoch zunächst die Höhe dieser Elemente angeben, damit weniger automatische Einschränkungen vorhanden sind. Es sieht auch so aus, als ob Sie zur Laufzeit viele der Constraints ändern. Sie müssen daher vorsichtig sein, Constraints zu ändern, die Konflikte verursachen. Stellen Sie sicher, dass das Layout glücklich ist, bevor Sie Constraint-constant fiedeln!

8

Sie auch Zugänglichkeit Identifikatoren und Constraint Hinzufügen Identifikatoren Ihre Ansichten in Erwägung ziehen könnte Ihre AL Protokolle besser lesbar zu machen:

constraintVariableName.identifier = “constraintVariableName”;

In Interface, verwenden Sie die Kennung Eigenschaft im Inspektor.

self.loginButton.accessibilityLabel = NSLocalizedString("LoginButtonAccessibilityLabel", @"");

Diese IDs werden in den Protokollen enden, wie Sie oben geschrieben, ersetzen Dinge wie UIView, UIImageView und UIConstraint mit den ids.

3

Es scheint, dass Sie der Bildansicht Beschränkungen in Bezug auf Superview auferlegt haben. Um Ihre Einschränkung von UILayoutGuide.bottom zu erfüllen, sind Ihre Beschränkungen also gebrochen. Wie Sie haben hinzugefügt mehr oder unnötige Einschränkungen, die nicht erforderlich waren.

Constraints, die gebrochen werden immer sind:

  1. UILayoutGuide.top = UIView.top
  2. UILayoutGuide.height = 0
  3. UILayoutGuide.bottom = UIView.bottom
  4. UIImageView Height constraint
  5. UIImageView Y-Position
  6. UIView Height constraint
  7. Sie haben gegeben UIView vertikalen Abstand von oben '0' ist, aber fehlende unten/Höhenbeschränkung.

Versuchen die Priorität der Höhenbeschränkungen von 1000-750 für UIImageView mit der Höhe (220), mit UIView Höhe (518) zu verändern.

Darüber hinaus müssen Sie für untere Einschränkung überprüfen für "<NSAutoresizingMaskLayoutConstraint:0x7b6f6e20 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x7c0f65e0] (Names: '|':UIView:0x7c0effc0)>"

Wenn es möglich ist, dann bitte Demo auf git für eine bessere Idee anhängen.

Ich hoffe, es hilft.

+0

Dies ist hilfreich, aber ich kann nicht sehen _where_ Einschränkungen 3 und 4 wurden möglicherweise zugewiesen, oder wie Sie sie finden, um ihre Priorität zu ändern. Ich arbeite mit Einschränkungen in meinem ViewController, aber ich sehe nichts, was sich darauf bezieht. (plus ich bekomme den Fehler, wenn sie sowieso auskommentiert sind) – thumbtackthief

+0

@thumbtackthief - Zuerst müssen Sie die Ansicht auswählen. Betrachten wir die vierte Einschränkung der UIImageView-Höhe. Alles, was Sie tun müssen, ist, Ihre UIImageView zu wählen und auf der rechten Seite von xCode zum Utilities-Panel zu gehen und Show Size Inspector zu wählen. Dort findest du die Einschränkung, die du deiner Sicht auferlegt hast. Tippen Sie zweimal auf die Einschränkung, deren Priorität Sie ändern möchten. –

+1

@thumbtackthief - Zweitens für die untere Layout-Anleitung müssen Sie für alle unteren Layout Guide überprüfen. Es wird eine gerade horizontale Linie sein, oder Sie können auswählen, dass Sie es aus dem Bereich Dokumentgliederung auswählen, in dem Sie bereits 2 Einschränkungen ausgewählt haben. Wählen Sie eine Bedingung und Sie können den konstanten Wert, die Priorität und den Multiplikator im Größeninspektor sehen. –

Verwandte Themen