- View와 ViewController 레이아웃 사이클
- ViewController 를 표시했을 때, 3단계로 호출이된다
- 업데이트 : 오토레이아웃의 Constraints를 갱신한다. Constraints의 갱신은 SubView로부터 SuperView의 순서대로 호출된다.
- 레이아웃 : Constraints를 바탕으로 레이아웃을 실행한다. 여기에서 view의 center와 bounds를 결정한다. 레이아웃의 갱신은 superview로 부터 subview의 순서로 호출된다.
- 그리기 : 레이아웃 후, UIView의 drawRect(rect:CGRect)가 호출된다. 이때는 CoreGraphics를 사용하여 그린다.
- viewController에서 레이아웃이 결정되는 과정
- viewWillLayoutSubViews() 메서드 호출
- ViewController의 컨텐트 뷰가 layoutSubViews()메서드 호출
- layoutSubViews() : 현재 레이아웃 정보들을 바탕으로 새로운 레이아웃 정보를 계산, 이후 뷰 계층 구조를 순회하면서 모든 하위 뷰들이 동일한 메서드를 호출
- 레이아웃 정보의 변경사항을 뷰들에 반영
- viewDidLayoutSubViews() 메서드 호출
- 관련 메서드
- viewWillLayoutSubviews()뷰가 자신의 서브뷰들의 배치를 조정하기 전에 하고 싶은게 있으면 이 메서드를 오버라이드하면 된다.
- 다음과 같은 작업을 수행하고자 할 때 이 메서드를 오버라이드
- 뷰들을 추가하거나 제거
- 뷰들의 크기나 위치를 업데이트
- 레이아웃 constraints를 업데이트
- 뷰와 관련된 기타 프로퍼티들을 업데이트
- 다음과 같은 작업을 수행하고자 할 때 이 메서드를 오버라이드
- → 뷰의 bounds(자기자신)가 변하면, 하위 뷰들의 위치를 조정하게 된다. 이 메서드는 뷰의 bounds가 변해서 뷰가 서브뷰의 배치를 조정하기 직전임을 뷰 컨트롤러에게 알리는 메서드이다.
- layoutSubviews()
- → 뷰의 크기가 변경될 때마다 이에 대응하여 하위 뷰들의 크기와 위치가 변경되어야한다. 뷰의 크기에 변경이 발생하면 우선 하위 뷰들의 autoresizing 동작을 적용하는데, 변경사항을 반영하기 위하여 layoutSubViews()메서드를 호출한다.
- viewDidLayoutSubViews()
- 다음과 같은 작업을 수행하고자 할 때 이 메서드를 오버라이드
- 다른 뷰들의 컨텐트 업데이트
- 뷰들의 크기나 위치를 최종적으로 조정
- 다음과 같은 작업을 수행하고자 할 때 이 메서드를 오버라이드
- → 뷰가 서브 뷰의 배치를 다했다는 소식을 뷰 컨트롤러에게 알린다. 뷰가 서브뷰들의 배치를 조정한 직후에 하고 싶은 작업이 있다면 이 메서드를 오버라이드 하면 된다.
- viewWillLayoutSubviews()뷰가 자신의 서브뷰들의 배치를 조정하기 전에 하고 싶은게 있으면 이 메서드를 오버라이드하면 된다.
728x90
'개발일기 > IOS' 카테고리의 다른 글
Xcode 시뮬레이터 빌드 안되는 문제 (0) | 2024.06.25 |
---|---|
[UiKit] pod install 오류 (0) | 2024.06.25 |
[UiKit] UIPanGesture setTransition(.zero) 해주는 이유 (0) | 2024.06.25 |
[Swift] - xcode phase script Execution failed with a nonzero exit code 에러 (0) | 2024.03.15 |
[Swift] - WebView(웹뷰) 사용할 때 인터넷 허용 (0) | 2024.03.15 |