답변:
제약 조건이 제거됩니다. 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];
}
}
하지만 두 개의 독립적 인 상위 뷰 A와 B와 하위 뷰 C가있는 경우 (C는 현재 A의 하위 뷰이며 적절한 제약 조건이있는 경우) [B addSubview : C]를 호출하면 A와 관련된 제약 조건이 해제되지 않습니다. 및 C, 자동 레이아웃이 예외를 발생시키기 시작합니다. 이러한 제약 조건은 더 이상 동일한 계층 구조의 뷰와 관련이 없기 때문입니다.
B에 C를 추가하기 전에 제약 조건을 제거하려면 [C removeFromSuperview]를 명시 적으로 호출해야합니다.
Mac OS X에서도 마찬가지입니다. iOS를 확인하지 않았습니다.
그것들도 제거되어 간단한 테스트를 할 수 있습니다. 뷰 SUBVIEW를 선택하고 SUBVIEW를 제한하는 costraint를 생성하여 superview 크기 조정을 따릅니다 (예 : superview 가장자리에 부착 됨). 이를 위해이 CONTAINERVIEW에 하위 뷰로 SUBVIEW를 추가하고 다음과 같은 제약 조건으로 추가합니다.
V : |-[SUBVIEW]-|
H : |-[SUBVIEW]-|
이러한 제약은 SUBVIEW superview에 추가되어야합니다. 따라서 CONTAINERVIEW가 필요합니다.
모든 CONTAINERVIEW 제약 조건을 확인하여 SUBVIEW를 제거하면 두 개가 더 이상 주변에 없다는 것을 알 수 있습니다.