관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] layout subviews 메서드 본문

iOS 기본 (swift)

[iOS - swift] layout subviews 메서드

jake-kim 2020. 10. 24. 22:51

기본 개념

layout subviews관련 메서드란?

  • ViewController관련 메서드인 viewWillAppear, viewDidAppear이 존재하듯이 레이아웃이 결정되기 전, 후의 메서드가 존재
  • UIKit은 이처럼 ViewController의 등장에 따른 연관된 부가적인 작업을 할 수 있도록 메서드가 존재
  • Layout Subviews역시 레이아웃이 결정되는 과정 중에 레이아웃과 연관된 부가적인 작업들을 수행할 수 있도록 UIKit은 몇 가지 메서드를 존재

ViewController에서 레이아웃이 결정되는 과정

  • viewWillLayoutSubviews() 메서드 호출
  • ViewController의 컨텐트 뷰가 layoutSubviews()메서드 호출
    • layoutSubviews(): 현재 레이아웃 정보들을 바탕으로 새로운 레이아웃 정보를 계산
    • 이후 뷰 계층구조를 순회하면서 모든 하위 뷰들이 동일한 메서드를 호출
  • 레이아웃 정보의 변경사항을 뷰들에 반영
  • viewDidLayoutSubviews()메서드 호출

layout subviews관련 메서드 쓰임

viewWillLayoutSubviews()

  • 뷰의 bounds가 변하면 뷰는 하위 뷰들의 위치를 조정하는데, 레이아웃이 결정되기 전에 다음과 같은 작업을 수행하고자 할때 이 메서드를 override하여 사용
    • 뷰들을 추가하거나 제거
    • 뷰들의 크기나 위치를 업데이트
    • 레이아웃 constraint를 업데이트
    • 뷰와 관련된 기타 프로퍼티들을 업데이트

layoutSubviews()

  • 뷰의 크기가 변경될 때마다 이에 대응하여 하위 뷰들의 크기&위치 변경되어야 함 -> auto layout을 사용하면 각 뷰의 autoresizingMask프로퍼티를 설정하여 상위 뷰의 크기가 변경되었을 때 어떻게 대응할 지 규칙을 정할 수 있음
  • 뷰의 크기에 변경이 발생하면 우선 하위 뷰들의 autoresizing 동작을 적용하는데, 변경사항을 반영하기 위하여 layoutSubviews()메서드를 호출 (이 메서드 역시 하위 뷰들에서도 연쇄적으로 호출 됨)

viewDidLayoutSubviews()

  • 레이아웃이 결정되고 나서 아래와 같은 일을 수행하고자 할 때 이 메서드를 override하여 사용
    • 다른 뷰들의 컨텐트 업데이트
    • 뷰들의 크기나 위치를 최종적으로 조정
    • 테이블의 데이터를 reload
Comments