私のアプリでは、制約を使って多くの作業を行っています。ほとんどの場合、アニメーションも使用しています。特定の状況では、制約を削除して新しい制約を追加する必要があります。
IOS 7もサポートする必要があるため、active
プロパティを使用できません。これは、他の方法で解決できます。
制約を削除する方法は、removeConstraint
でUIView
メソッドを使用することです。
次のようなメソッドを作成することは可能ですか?
constraint.remove()
したがって、どのビューが制約を処理しているかを知る必要はありませんか?
autoRemove
ライブラリによって提供されるメソッドPureLayout
を使用することになりました: https://github.com/smileyborg/PureLayout
このメソッドは、firstItemまたはsecondItemを使用してcommonSuperviewを検索し、正しいビューから制約を削除します。
その結果、この1つのライナーが作成されました。
containerTopConstraint.autoRemove()
私がしていることは、追加/削除できるようにしたい制約の配列を作成し、単に以下を使用することです。
@property NSMutableArray *newConstraints;
newConstraints
を埋めます
iOS7およびiOS8:
[self.viewToChange addConstraints:self.newConstraints];
[self.viewToChange removeConstraints:self.newConstraints];
またはiOS8のみ、新しいメカニズムを使用します
[NSLayoutConstraint activateConstraints:self.newConstraints];
[NSLayoutConstraint deactivateConstraints:self.newConstraints];
これにより、セットを適用したり、セットを削除したり、新しいセットを適用したりできます。
どの制約がどれであるかを識別できる場合は、ストーリーボードセットから初期リストを作成することもできます。
いいえ、私が知っていることではありません。ホストビューの自動管理はiOS8でのみ提供されました。
醜い実装は、すべてのビューのすべての制約をループして、それが存在するビューを見つける可能性があります。
ただし、通常、制約がどのビューで定義されているかを常に把握できる方法で制約を管理することは難しくありません。