回答:
制約が削除されます。もう一度Aを追加する場合は、新しい制約を作成する必要があります。または、Aを削除する前に制約を保存しておくと、元に戻すことができます。このようなことを行うと、view1というビューのこのような制約を保存します。
self.portraitConstraints = [NSMutableArray new];
for (NSLayoutConstraint *con in self.view.constraints) {
if (con.firstItem == self.view1 || con.secondItem == self.view1) {
[self.portraitConstraints addObject:con];
}
}
私もこの質問を持っていたので、キックのためにApple Docsをチェックしたところ、制約が削除されたことが文書化されていることがわかりました。
UIView removeFromSuperviewメソッドのドキュメントには、次のように記載されています。
このメソッドを呼び出すと、削除するビューを参照する制約、または削除するビューのサブツリー内のビューを参照する制約が削除されます。
これが元の質問が投稿されたときに昨年文書化されたかどうかはわかりませんが、誰かがそれを必要とする場合に備えて、この情報を共有すると思いました...
ただし、2つの独立した親ビューAとB、およびサブビューC(Cは現在Aのサブビューであり、適切な制約がある)がある場合、[B addSubview:C]を呼び出してもAに関する制約はクリアされないことに注意してください。そしてC、そして自動レイアウトは例外を投げ始めます、なぜならそれらの制約はもはや同じ階層のビューに関係しないからです。
CをBに追加する前に、[C removeFromSuperview]を明示的に呼び出して制約を削除する必要があります。
これはMac OS Xにも当てはまります-iOSをチェックしていません
それらも削除され、簡単なテストを行うことができます。ビューSUBVIEWを取得し、SUBVIEWがそのスーパービューのサイズ変更に追従するように制約するコストラインを作成します(エッジをスーパービューに接続するように)。これを行うには、このCONTAINERVIEWにサブビューとしてSUBVIEWを追加し、次のような制約として追加します
。V:|-[SUBVIEW]-|
H:|-[サブビュー]-|
これらの制約はSUBVIEWスーパービュー、つまりCONTAINERVIEWに追加する必要があります。
すべてのCONTAINERVIEW制約をチェックするだけでSUBVIEWを削除すると、2つがもはや存在しないことがわかります。