UIStoryboard wie ersetzen Einschränkungen programmgesteuert?
Ich habe einen view-controller angelegt in einem storyboard mit autolayout aktiviert und bin auf der Suche nach einem Weg, um zu ändern, Einschränkungen zu erlauben, meine Ansicht zu drehen in landscape-und Neuanordnen von Schaltflächen auf dem Bildschirm. Wenn ich versuche den code unten, bekomme ich etwa zwei Dutzend "nicht zu befriedigen Einschränkungen, brechen Einschränkung..." Meldungen kann ich nicht wirklich entschlüsseln.
Gibt es eine Möglichkeit, dynamisch zu ersetzen Einschränkungen, von einem storyboard mit Einschränkungen, die ich programmgesteuert angeben? Ich möchte komplett überschreiben, das layout, die Tasten, die ich definiert in einem storyboard.
-(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];
}
}
Aktualisiert mit Rob ' s Antwort, hier ist die Methode zu entfernen Einschränkungen, die ich verwenden
-(void)removeConstraintForView:(UIView*)viewToModify
{
UIView* temp = viewToModify;
[temp removeFromSuperview];
[self.view addSubview:temp];
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie Sie wollen nur entfernen Sie alle Beschränkungen auf einen Blick. Da die Einschränkungen für eine view oft gehalten werden, von einem Vorfahren der Ansicht, es ist nicht klar, wie zu entfernen alle Einschränkungen leicht. Aber es ist eigentlich ziemlich einfach.
Entfernen einer Ansicht aus der Hierarchie entfernt alle constraints zwischen der Ansicht und andere Ansichten außerhalb. So entfernen Sie Ihren Blick von seinem superview und dann wieder hinzufügen:
Ob es irgendwelche Einschränkungen dazwischen
someView
und seine Nachkommen, diejenigen Beschränkungen stattfinden könnte, indemsomeView
selbst (aber nicht durch alle Nachkommen vonsomeView
). Wenn Sie möchten, entfernen Sie diese Einschränkungen auch, können Sie dies direkt tun:translatesAutoresizingMaskIntoConstraints = NO
auf der container-Ansicht.. und nicht Einstellung der Breite/Höhe ..>