Ich habe einen View-Controller in einem Storyboard mit Auto-Layout aktiviert und bin auf der Suche nach einer Möglichkeit, Constraints zu ändern, damit meine Ansicht in Querformat drehen und Tasten auf dem Bildschirm neu anordnen kann. Wenn ich den folgenden Code ausprobiere, bekomme ich ungefähr zwei Dutzend "Unfähigkeit, Einschränkungen zu erfüllen, Einschränkungen zu brechen ...", die ich nicht wirklich entschlüsseln kann.UIStoryboard Wie programmgesteuert Constraints zu ersetzen?
Gibt es eine Möglichkeit, Constraints dynamisch aus einem Storyboard mit Constraints, die ich programmgesteuert angeben, zu ersetzen? Ich möchte das Layout der Schaltflächen, die ich in einem Storyboard definiert habe, komplett außer Kraft setzen.
-(void)updateViewConstraints
{
[super updateViewConstraints];
self.loginButton.translatesAutoresizingMaskIntoConstraints = NO;
self.getStartedButton.translatesAutoresizingMaskIntoConstraints = NO;
self.takeTourButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.loginButton removeConstraints:self.loginButton.constraints];
[self.getStartedButton removeConstraints:self.getStartedButton.constraints];
[self.takeTourButton removeConstraints:self.takeTourButton.constraints];
one = self.loginButton;
two = self.getStartedButton;
three = self.takeTourButton;
NSDictionary *metrics = @{@"height":@50.0,@"width":@100.0,@"leftSpacing":@110.0};
NSDictionary *views = NSDictionaryOfVariableBindings(one,two,three);
[self.view removeConstraints:activeTestLabelConstraints];
[activeTestLabelConstraints removeAllObjects];
if(isRotatingToLandscape)
{
[self registerConstraintsWithVisualFormat:@"|-[one(two)]-[two(three)]-[three]-|" options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"V:[one(height)]-|" options:0 metrics:metrics views:views];
}else
{
[self registerConstraintsWithVisualFormat:@"|-leftSpacing-[one(width)]" options:0 metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"[two(width)]" options:0 metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"[three(width)]" options:0 metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"V:[one(height)]-[two(75)]-[three(100)]-|" options:NSLayoutFormatAlignAllCenterX metrics:metrics views:views];
}
}
mit Robs Antwort aktualisiert, hier ist die Methode Einschränkungen zu entfernen, die ich
-(void)removeConstraintForView:(UIView*)viewToModify
{
UIView* temp = viewToModify;
[temp removeFromSuperview];
[self.view addSubview:temp];
}
Danke, das hat funktioniert! –
Mir ist aufgefallen, dass das Entfernen der Unteransicht aus Superview nicht für die für diese Unteransicht definierten Einschränkungen funktioniert (wie fixierte Höhe und Breite) –
Der zweite Teil meiner Antwort entfernt die Einschränkungen für Breite und Höhe. –