뷰가 제거되면 제약 조건이 어떻게 되나요?
내가 가진 질문은 간단하지만 문서에서 정보를 찾을 수 없습니다.
뷰 계층 구조에서 뷰를 제거하거나 다른 뷰로 이동하면 레이아웃 제약 조건은 어떻게됩니까?
예를 들어, C
하위 뷰 A
와 B
. 컨테이너 C
에는 몇 가지 제약이 있습니다. 그런 다음 [A removeFromSuperview]
. 제약 조건은 어떻게됩니까 A
?
다시 추가 A
하면 C
어떻게 되나요?
제약이 제거됩니다. 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 방법 상태에 대한 :
이 메서드를 호출하면 제거 할 뷰를 참조하거나 제거 할 뷰의 하위 트리에있는 뷰를 참조하는 제약 조건이 제거됩니다.
작년에 원래 질문이 게시되었을 때 이것이 문서화되었는지 확실하지 않지만 누군가가 필요할 경우를 대비하여이 정보를 공유 할 것이라고 생각했습니다 ...
그러나 두 개의 독립적 인 상위 뷰 A와 B와 하위 뷰 C가있는 경우 (C는 현재 A의 하위 뷰이며 적절한 제약 조건이있는 경우) [B addSubview : C]를 호출하면 A와 관련된 제약 조건이 지워지지 않습니다. 및 C, 자동 레이아웃이 예외를 발생시키기 시작합니다. 이러한 제약 조건은 더 이상 동일한 계층 구조의 뷰와 관련이 없기 때문입니다.
B에 C를 추가하기 전에 제약 조건을 제거하려면 [C removeFromSuperview]를 명시 적으로 호출해야합니다.
Mac OS X에서도 마찬가지입니다. iOS를 확인하지 않았습니다.
제약 조건은 다음과 같은 경우에도 제거됩니다. [A removeFromSuperview]
그들은 잊혀지고 A를 C에 다시 추가하면 제약이 추가되지 않습니다.
그것들도 제거되어 간단한 테스트를 할 수 있습니다. 뷰 SUBVIEW를 선택하고 SUBVIEW를 제한하는 costraint를 생성하여 superview 크기 조정을 따릅니다 (예 : superview 가장자리에 부착 됨). 이를 위해이 CONTAINERVIEW에 하위 뷰로 SUBVIEW를 추가하고 다음과 같은 제약 조건으로 추가합니다.
V : |-[SUBVIEW]-|
H : |-[SUBVIEW]-|
이러한 제약은 SUBVIEW superview에 추가되어야합니다. 따라서 CONTAINERVIEW가 필요합니다.
모든 CONTAINERVIEW 제약 조건을 확인하여 SUBVIEW를 제거하면 두 개가 더 이상 주변에 없다는 것을 알 수 있습니다.
이 질문은 인터페이스 빌더로도 증명할 수 있습니다. 추가 제약 조건 UIView
에 a 를 끌어다 놓은 ViewController
다음을 제거 UIView
하면 파란색 제약 조건이 사라지는 것을 볼 수 있습니다.
참고 URL : https://stackoverflow.com/questions/18617991/what-happens-with-constraints-when-a-view-is-removed
'code' 카테고리의 다른 글
git 저장소를 mercurial로 어떻게 변환합니까? (0) | 2020.08.13 |
---|---|
텍스트 영역에 대한 val () 대 text () (0) | 2020.08.13 |
GitHub API에서 기본 인증을 위해 사용자 이름 및 비밀번호와 함께 Invoke-WebRequest 사용 (0) | 2020.08.13 |
C ++ 20은 파일에 저장되는 소스 코드를 요구합니까? (0) | 2020.08.13 |
Oracle SQL의 BLOB에서 텍스트 콘텐츠를 가져 오는 방법 (0) | 2020.08.13 |