2017-06-20 5 views
-1

Ich lese viele Themen zum Entfernen von Constraints, die über das Storyboard hinzugefügt wurden, ziehen outlet und entfernen usw., aber wie kann ich programmgesteuert hinzugefügte Constraints entfernen? Zum BeispielEntfernen von Einschränkungen, die programmgesteuert hinzugefügt wurden

firstView.topAnchor.constraints(equalTo: secondView.bottomAnchor, constant: 15).isActive = true 

wie kann ich es deaktivieren und dann wieder aktivieren, wenn nötig. Vielleicht sollte es so etwas wie?

firstView.removeConstraint(firstView.topAnchor.constraints(equalTo: secondView.bottomAnchor)) 

Antwort

2

Sie sollten Ihre Beschränkung auf eine Eigenschaft in Ihrem ViewController zuweisen. Und dann setzen Sie .isActive auf false statt wahr.

Ihr Code sollte wie folgt aussehen:

let myConstraint = firstView.topAnchor.constraint(equalTo: secondView.bottomAnchor, constant: 15) 

Jetzt, um es zu aktivieren:

myConstraint.isActive = true 

Und es zu deaktivieren:

myConstraint.isActive = false 
+1

Vielen Dank! – Sargot

+0

@Sargot Sie sind herzlich willkommen! Wenn Sie Fragen zu diesem Ansatz haben, fragen Sie nach. –

-3

Entfernen Sie Einschränkungen werden in der Zukunft veraltet sein.

Hier ist die alternative Möglichkeit, das Gleiche zu tun.

aktivieren/deaktivieren Einschränkungen tun mit folgenden Methoden

Objective-C

viewHeightConstraint.active = YES;  // Enable 
viewHeightConstraint.active = NO;  // Disable 

Swift

viewHeightConstraint.isActive = true // Enable 
viewHeightConstraint.isActive = false // Disable 
+0

was ist viewheight? Ist das die Ansicht, die Sie aktivieren/deaktivieren? Ich dachte, es funktioniert nur für Einschränkungen. Sorry, ich verstehe nicht, Ihre Antwort auf all – Sargot

+1

'' und zu bejahen ist true' sind booleans in Objective-C –

0

Sie müssen einen Verweis auf Ihre Einschränkung zu halten.

let constraintName:NSLayoutConstraint = firstView.topAnchor.constraint(equalTo: secondView.bottomAnchor, constant: 15) 
    constraintName.isActive = true 

Deaktivieren Sie es, wenn Sie es nicht benötigen.

constraintName.isActive = false 

Aktivieren Sie es, wenn Sie es zurück wollen.

constraintName.isActive = true 
+0

Thank you very much! – Sargot

+0

'NSLayoutYAxisAnchor' hat kein Mitglied' constraints' – Maddy

+1

Es sollte 'topAnchor.constraint()', nicht 'topAnchor.constraints()'. Auch der explizite Typ Annotation ': NSLayoutConstraint' wird nicht benötigt –

Verwandte Themen