- [Swift] LayoutSubivews2024년 08월 08일 22시 08분 03초에 업로드 된 글입니다.작성자: 이중엽
개발을 하다보면, View의 너비나 높이를 알고 싶어도 ViewDidAppear 이 후에나 확인이 가능하다.
그러다 layoutSubviews 메서드 내부에서는 언제든 너비나 높이를 확인할 수 있어서 자주 사용하고 있었다.
layoutSubviews가 정확히 언제 호출되고 무슨 역할인지 알아보려 한다.
LayoutSubviews란?
layoutSubviews 메서드는 UIView의 서브뷰들의 배치와 크기가 어떻게 조정될지 결정한다.
자동 호출 시점
- View의 Frame 또는 Bounds가 변경될 때
- 서브뷰가 추가 또는 삭제 될 때
- 뷰가 처음 화면에 표시될 때
직접적인 호출을 하지 않아도 됨
이처럼 아직 view가 나타나지 않은 viewWillAppear 시점과 view가 나타났음을 알려주는 viewDidAppear 시점 사이에 자동으로 호출되어 뷰의 레이아웃이 계산되어 서브뷰들이 배치되어 내가 원하는 view의 size를 알 수 있게 된다.
호출 방법
앞서 시스템이 자동으로 호출하기 때문에 괜찮다고 했지만, subViews들의 레이아웃이 바뀌거나 하더라도 view에 frame이나 bounds 자체에 직접적인 영향을 주지 않는다면 자동으로 호출되지 않는다.
더불어 Apple에서는 layoutSubviews()의 직접적인 호출은 코스트가 많이 들기 때문에 지양하라고 한다.
이에 간접적인 호출 방법을 제시한다.
setNeedsLayout
- 즉시 layoutSubviews를 호출하지 않고 다음 run loop 사이클에서 호출된다.
- 메서드 호출 자체는 동기로 실행된다.
- 레이아웃 업데이트가 비동기적으로 처리된다.
- 여러번의 레이아웃 변경 요청을 하나로 병합하여 처리할 수 있다.
- 매 프레임마다 레이아웃을 재계산할 필요없이 레이아웃 변경을 한번에 처리하기 때문에 성능 향상이 있다.
layoutIfNeeded
- 현재 레이아웃 업데이트 주기에 강제로 레이아웃 업데이트를 진행한다.
- 동기로 실행된다.
setNeedsLayout -> 숫자 먼저 찍히고 layoutSubviews가 호출된다.
layoutIfNeeded -> layoutSubviews가 먼저 호출되고 숫자가 찍힌다.
'Swift' 카테고리의 다른 글
[Swift] final (0) 2024.08.07 [Swift] View Life Cycle (0) 2023.06.11 [Swift] App Life Cycle (0) 2023.06.11 다음글이 없습니다.이전글이 없습니다.댓글