2016-04-19 16 views
0

Hey Ich habe ein Setup wie folgt aus:Ärger Anpassung Einschränkungen programmatisch

enter image description here

Die linke Constraint konstant ist 111. Ich möchte diese Beschränkung auf 20 ändern und die Länge der Schachtel zu erhöhen. Zur Zeit habe ich:

@IBAction func didTapButton(sender: AnyObject) { 

     view.removeConstraint(leadingConstraint) 
     leadingConstraint = NSLayoutConstraint(item: view.superview!, attribute: .Leading, relatedBy: .Equal, toItem: greenView, attribute: .Leading, multiplier: 1.0, constant:20) 
     view.addConstraint(leadingConstraint) 

    } 

ich ursprünglich einen Fehler mit leadingConstraint = NSLayoutConstraint(item: view.superview!, attribute: .Leading, relatedBy: .Equal, toItem: greenView, attribute: .Trailing, multiplier: 1.0, constant:20) hatte. Also habe ich es in .Leading und .Leading für beide Attribute geändert. Nun ist das Rechteck streckt, aber es ist nicht die richtige Größe, ist es den Bildschirm abgehend:

enter image description here

Was mache ich falsch hier? (HINWEIS: Ich möchte diese Einschränkungen ändern, indem ich eine neue Einschränkung hinzufüge und nicht einfach nur den konstanten Wert ändere. Ich versuche, ein besseres Verständnis zu bekommen!). Irgendwelche Hinweise darauf würden sehr geschätzt werden! Dank

+0

Es ist keine Antwort auf Ihre Frage, aber ein guter Vorschlag für die Zukunft: Verwenden Sie 'view.addConstraint (someConstraints)' nie! Stattdessen benutze 'NSLayoutConstraint.activateConstraints (someConstraints)' oder 'someConstraint.active = true' – DevAndArtist

Antwort

1

So wie ich das tun soll, ist:

Storyboard:

  • erstellen 2 Einschränkungen (einen für den ersten Zustand und einen für das Ende eins).
  • Ändern Sie die Priorität jeder Einschränkung. Der erste muss höher sein als der zweite, aber nicht 1000. Sagen wir 751 für den ersten und 749 für den zweiten.
  • Erstellen Sie ein IBOutlet für jede Abhängigkeit.

Code:

  • Ändern der Priorität jeder Eingrenzungs (firstConstraint.priority = 749, secondConstraint.priority = 751).
  • Machen Sie eine view.layoutIfNeeded().
  • All dies muss im Hauptthread erfolgen.

Ich hoffe, es funktioniert.

1

Verwenden Sie die Konstante -20 anstelle von 20 oder tauschen Sie Ansichten aus, wenn Sie leadingConstraint einrichten.

+0

Ja, ändere es auf -20. Außerdem können Sie Constraints aktivieren/deaktivieren, anstatt sie hinzuzufügen/zu entfernen. – OutOnAWeekend