2016-07-04 10 views
0

私は012で、制約をIBで設定したUIViewを持っています。コードでは、いくつかの新しい制約を追加し、古いものを無効にして、アニメーションを行いたいと思っています。最初に私はこのように、それがアクティブで、表示するために、新しい制約を追加:既存の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]; 

をしかし、これは実行時制約警告生成 - 私が持っているが、私は競合する制約を持っていること、(stnadardメッセージは、いくつかの制約を破るしようとします)非アクティブ制約が追加されました。どうすればこれに対処できますか、これはどうやって行なわれるのですか?

答えて

1

ビューには非アクティブな制約がありません。ビューに制約を追加すると、その制約がアクティブになります。

activeプロパティをYESに設定する新しい方法は、適切なビューに制約を追加します。あなたのコードで、addConstraintを呼び出すと、iOSはあなたのビューにあなたの制約を加え、activeYESに変更しました。

したがって、addConstraintをビューに呼び出さないでください。制約を作成し、それを使用する場合はプロパティをYESに設定するだけです。

+0

これはiOS9 ...のように、最初から存在していたものか、後から追加されたものですか? – MegaManX

+0

iOS8に 'active'プロパティが追加されました。制約を追加するビューを把握する必要がないので、これははるかに優れた方法です。 iOSは 'item'と' toItem'からそれを理解することができます。 – vacawama

+1

配列に複数の制約(myArrayOfContraintsと呼ばれます)を一度に有効にするには、クラスメソッド '[NSLayoutConstraint activateConstraints:myArrayOfContraints]'を使用できます。 – vacawama

関連する問題