[UiKit] 뷰 레이아웃 관련 메서드 정리...

2024. 6. 25. 15:22·개발일기/IOS
  • View와 ViewController 레이아웃 사이클
    • ViewController 를 표시했을 때, 3단계로 호출이된다
    1. 업데이트 : 오토레이아웃의 Constraints를 갱신한다. Constraints의 갱신은 SubView로부터 SuperView의 순서대로 호출된다.
    2. 레이아웃 : Constraints를 바탕으로 레이아웃을 실행한다. 여기에서 view의 center와 bounds를 결정한다. 레이아웃의 갱신은 superview로 부터 subview의 순서로 호출된다.
    3. 그리기 : 레이아웃 후, UIView의 drawRect(rect:CGRect)가 호출된다. 이때는 CoreGraphics를 사용하여 그린다.
  • viewController에서 레이아웃이 결정되는 과정
    1. viewWillLayoutSubViews() 메서드 호출
    2. ViewController의 컨텐트 뷰가 layoutSubViews()메서드 호출
    3. layoutSubViews() : 현재 레이아웃 정보들을 바탕으로 새로운 레이아웃 정보를 계산, 이후 뷰 계층 구조를 순회하면서 모든 하위 뷰들이 동일한 메서드를 호출
    4. 레이아웃 정보의 변경사항을 뷰들에 반영
    5. viewDidLayoutSubViews() 메서드 호출
  • 관련 메서드
    • viewWillLayoutSubviews()뷰가 자신의 서브뷰들의 배치를 조정하기 전에 하고 싶은게 있으면 이 메서드를 오버라이드하면 된다.
      • 다음과 같은 작업을 수행하고자 할 때 이 메서드를 오버라이드
        • 뷰들을 추가하거나 제거
        • 뷰들의 크기나 위치를 업데이트
        • 레이아웃 constraints를 업데이트
        • 뷰와 관련된 기타 프로퍼티들을 업데이트
    • → 뷰의 bounds(자기자신)가 변하면, 하위 뷰들의 위치를 조정하게 된다. 이 메서드는 뷰의 bounds가 변해서 뷰가 서브뷰의 배치를 조정하기 직전임을 뷰 컨트롤러에게 알리는 메서드이다.
    • layoutSubviews()
    • → 뷰의 크기가 변경될 때마다 이에 대응하여 하위 뷰들의 크기와 위치가 변경되어야한다. 뷰의 크기에 변경이 발생하면 우선 하위 뷰들의 autoresizing 동작을 적용하는데, 변경사항을 반영하기 위하여 layoutSubViews()메서드를 호출한다.
    • viewDidLayoutSubViews()
      • 다음과 같은 작업을 수행하고자 할 때 이 메서드를 오버라이드
        • 다른 뷰들의 컨텐트 업데이트
        • 뷰들의 크기나 위치를 최종적으로 조정
    • → 뷰가 서브 뷰의 배치를 다했다는 소식을 뷰 컨트롤러에게 알린다. 뷰가 서브뷰들의 배치를 조정한 직후에 하고 싶은 작업이 있다면 이 메서드를 오버라이드 하면 된다.
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
'개발일기/IOS' 카테고리의 다른 글
  • Xcode 시뮬레이터 빌드 안되는 문제
  • [UiKit] pod install 오류
  • [UiKit] UIPanGesture setTransition(.zero) 해주는 이유
  • [Swift] - xcode phase script Execution failed with a nonzero exit code 에러
코딩하는빵친자
코딩하는빵친자
안녕하세요 코딩하는 빵친자입니다. 말그대롭니다.
  • 코딩하는빵친자
    코딩하는 빵친자의 블로그
    코딩하는빵친자
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • 개발일기 (41)
        • Python (9)
        • Swift (2)
        • DataBase (0)
        • 알고리즘 (0)
        • IOS (30)
      • 데보션 영 (4)
      • 코테 (10)
        • Swift (10)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ios개발
    ios스와이프
    arm7
    podlock
    podinstall오류
    uipangesture
    universalapp
    SWIFT
    Rosetta
    pod
    추적권한
    uikit
    IOS
    뷰관련메서드
    buildsetting
    delegate패턴
    xcode
    아웃링크
    제스처인식
    settransition
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩하는빵친자
[UiKit] 뷰 레이아웃 관련 메서드 정리...
상단으로

티스토리툴바