web-dev-qa-db-ja.com

自動レイアウトUIViewを非表示にする:既存のNSLayoutConstraintを取得してこれを更新する方法

既存の制約を変更する方法を知っています。しかし、誰かがこれをプロパティとして保存せずに制約を取得するための解決策を見つけたかどうかを知りたいと思います。

制約の高さを設定するための現在のソリューション:

1)NSLayoutConstraintを変数に保存します:

NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:myView
                                                                    attribute:NSLayoutAttributeHeight
                                                                    relatedBy:NSLayoutRelationEqual
                                                                       toItem:nil
                                                                    attribute:NSLayoutAttributeNotAnAttribute
                                                                   multiplier:1.0f
                                                                     constant:20];
[self.view addConstraint:heightConstraint];

2)保存された制約の定数を「0.0」に設定します(このビューを非表示にします)

[heightConstraint setConstant:200];

私はこのような解決策を探しています:

 [myView setConstraint:@"0." forAttribute:NSLayoutAttributeHeight]
11
Damien Romito

必要なときに制約を更新するこのカテゴリ( https://github.com/damienromito/UIView-UpdateAutoLayoutConstraints )を作成しました。

//you can use tools to hide/show a uiview
[myView1 hideByHeight:YES];

enter image description here

または、自動レイアウトでUIViewを非表示にするには

//Hide View 
[myView1 setConstraintConstant:0 forAttribute:NSLayoutAttributeHeight];
14
Damien Romito

UIViewには、次のいずれかのディメンションのレイアウトに影響するすべての制約を返すメソッドがあります。

NSArray *constraints = 
[someView constraintsAffectingLayoutForAxis:UILayoutConstraintAxisVertical];

次に、興味のあるものを見つけることができます。

5
DrummerB