2016-07-04 7 views
0

Ich habe UIView für die ich Einschränkungen in IB festgelegt habe. Jetzt im Code möchte ich etwas Animation machen, indem ich einige neue Beschränkungen hinzufüge und alt deaktiviere. Zuerst füge ich neue Einschränkung zu sehen, dass inaktiv ist, wie folgt aus:Hinzufügen von nicht aktiven Constraints zu bestehenden UIView

// camera view new constraints 
    self.cameraNewLeftConstraint = [NSLayoutConstraint constraintWithItem:self.cameraView 
                   attribute:NSLayoutAttributeLeading 
                   relatedBy:NSLayoutRelationEqual 
                    toItem:self.smallImageContainerView 
                   attribute:NSLayoutAttributeLeading 
                   multiplier:1.0 
                   constant:0]; 
    self.cameraNewLeftConstraint.active = NO; 
    [self.presentationView addConstraint:self.cameraNewLeftConstraint]; 

Aber das erzeugt Constraint Warnung während der Laufzeit (stnadard Nachricht - versuchen, einige Einschränkungen zu brechen), dass ich widersprüchliche Zwänge haben, obwohl ich hinzugefügte inaktive Einschränkung. Wie kann ich damit umgehen, wie soll das gemacht werden?

Antwort

1

Ansichten haben keine inaktiven Abhängigkeiten. Wenn Sie einer Ansicht eine Einschränkung hinzufügen, ist diese Einschränkung aktiv.

Die neue Methode zum Festlegen der active-Eigenschaft auf YES fügt die Einschränkung der richtigen Ansicht für Sie hinzu. Wenn Sie in Ihrem Code addConstraint aufgerufen haben, hat iOS Ihre Einschränkung zu Ihrer Ansicht hinzugefügt und active in YES geändert.

Also, rufen Sie nicht addConstraint auf der Ansicht. Erstellen Sie einfach die Einschränkung und legen Sie ihre active -Eigenschaft auf YES, wenn Sie es verwenden möchten.

+0

Ist das etwas von Anfang an oder wurde später hinzugefügt, wie iOS9 ...? – MegaManX

+0

Die Eigenschaft 'active' wurde in iOS8 hinzugefügt. Es ist eine viel bessere Art, Dinge zu tun, weil Sie nicht herausfinden müssen, in welchen Ansichten die Einschränkungen hinzugefügt werden. iOS kann das aus "item" und "toItem" herausfinden. – vacawama

+1

Wenn Sie in einem Array eine Menge von Constraints haben ("myArrayOfContinints" genannt), die Sie sofort aktivieren möchten, können Sie die Klassenmethode '[NSLayoutConstraint activateConstraints: myArrayOfContinints]' verwenden. – vacawama