Autolayout-constraints Warnung "Wird versuchen sich zu erholen von breaking constraint"
Ich bin einige Besonderheiten Einschränkungen für das iPhone 4, wenn die app lief auf diesem Gerät. Alles toll Aussehen in Bezug auf die Ausrichtung und alles.
Aber, ich erhalte eine Fehlermeldung für alle meine Zwänge, die versuchen, Sie zu retten, indem Sie brechen die Zwänge.
Diese Methode wird call-in meinem viewDidLoad, wenn es erkennt, wenn Ihr ein iPhone 4
- (void) addConstraints {
//removing automatic system constraints
[self.view removeConstraints:self.view.constraints];
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
NSDictionary *views = NSDictionaryOfVariableBindings(appBackground, myCustomer, myItemDetails, myItemQuantity, myItemPrice, myNext, myBtn); //UIImageView, UITextField, UIButton
for (UIView *view in [views allValues]) {
view.translatesAutoresizingMaskIntoConstraints = NO;
}
NSDictionary *metrics = @{@"width": @210.0, @"height": @42.0, @"verticalSpacing": @34};
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[appBackground]|"
options:0
metrics:nil
views:views];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[appBackground]|"
options:0
metrics:nil
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(85)-[myCustomer(==height)]-(verticalSpacing)-[myItemDetails(==height)]-(verticalSpacing)-[myItemQuantity(==height)]-(verticalSpacing)-[myItemPrice(==height)]-(18)-[myNext(==35)]-(71.5)-[myBtn(==50)]-(7.5)-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[myCustomer(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[myItemDetails(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[myItemQuantity(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[myItemPrice(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-78-[myNext(==173)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-11.5-[myBtn(==54)]-|"
options:0
metrics:metrics
views:views]];
[self.view addConstraints:constraints];
}
Fehler!
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:0xb8282f0 H:|-(50)-[UITextField:0xb823fc0] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb828320 H:[UITextField:0xb823fc0(210)]>",
"<NSLayoutConstraint:0xb82be10 H:[UITextField:0xb823fc0]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d3d0 H:|-(78)-[UIButton:0xb82ad50] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d420 H:[UIButton:0xb82ad50(173)]>",
"<NSLayoutConstraint:0xb82d450 H:[UIButton:0xb82ad50]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xb82d450 H:[UIButton:0xb82ad50]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>
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.
2014-08-03 14:03:29.239 iReceipt[2886:607] 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:0xb8282f0 H:|-(50)-[UITextField:0xb823fc0] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb828320 H:[UITextField:0xb823fc0(210)]>",
"<NSLayoutConstraint:0xb82be10 H:[UITextField:0xb823fc0]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d480 H:|-(11.5)-[UIButton:0xb820120] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82e390 H:[UIButton:0xb820120(54)]>",
"<NSLayoutConstraint:0xb82e3c0 H:[UIButton:0xb820120]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xb82e3c0 H:[UIButton:0xb820120]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>
Bitte lassen Sie mich wissen, wenn Sie Jungs benötigen Sie mehr Informationen..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese drei Einschränkungen:
diktieren, dass die superview werden 50 + 210 + 20 == 280 Punkte breit.
Diese drei Einschränkungen:
diktieren, dass die gleiche superview werden 78 + 173 + 20 == 271 Punkte breit.
Offensichtlich, die können nicht beide wahr sein zur gleichen Zeit. Sie müssen entscheiden, was Sie wirklich wollen, um hier passieren. Wir können deine Gedanken nicht Lesen und kann weder UIKit.
In der Regel, Sie nicht setzen eine Breite Einschränkung auf eine Taste; lassen Sie es verwenden, Ihre eigene Größe mit entsprechenden Prioritäten für Inhalte, die umarmt und Druckfestigkeit. Auch, Sie können nicht wollen, legen Sie hart Abstand auf jeder Seite der Schaltfläche. Entweder lassen Sie, dass der Abstand variieren, ohne Einschränkung, so kann mit der Schaltfläche werden Ihre intrinsische Größe, niedriger die Priorität der Einschränkung, es ist also optional, oder eine Ungleichheit, so haben Sie einen minimalen Abstand, aber nicht einen genauen Abstand.
85+3*(height+verticalSpacing)+height+18+35+71.5+50+7.5
Punkte hoch, obwohl. Bauen Sie so viel Flexibilität in Ihre Einschränkungen wie möglich, wie Ken erwähnt.UIButton
scheint IhrmyNext
angesichts der Breite. DieUITextField
könnte jede von Ihnen, da Sie gezwungen sind, auf die gleiche Weise. Ich muss allerdings sagen, dass Sie scheinen vorbei zu sein-einschränken im Allgemeinen. Ich weiß nicht, was die Beziehung der superview ist auf dem Bildschirm, aber Sie diktieren alles auf den Punkt. Es gibt keine Flexibilität für die übergabe unterschiedliche Bildschirm-Größen oder Ausrichtungen, etc.0xb823fc0
anfänglich dachte ich, es ist der Zeiger auf die textField-Instanz (beim drucken mit Ihrem text), aber mein Xcode zeigt mir, es ist der Typlong
0xb823fc0
in diesem Fall ist die Adresse der-Ansicht (ein Textfeld).Sind Sie einschränken, Ihre Ansichten zu viel. Sie müssen sich immer verlassen, zum Beispiel einer leftmargin, Breite und rechterrand flexibel, und lassen Sie die autolayout-engine-Strecke, ein.
Einem einzigen Strich, ohne jede Zahl steht für die Entfernung, die 20 Pixel. Also, wenn Sie entfernen Sie Ihre trailing-Einschränkungen auf
und ändern Sie Sie, um
die layout-engine wird dann Strecken Sie die ReportWidth der Schaltfläche zu machen, passen Sie die
mit Blick. Es gibt natürlich noch andere Möglichkeiten der Lockerung dieser Einschränkungen, je nach design-Ziele.
Persönlich, ich benutze nie die standard-API:s für autolayout mehr. Ich benutze die Bibliothek PureLayout, die abstracts autolayout wunderbar!
@"H:|-78-[myNext(==173)]"
).