[SwiftUI] GeometryReader

haram·2025년 1월 9일

어떤상황에서 쓰일까?

SwiftUI는 선언형 UI라고 한다. 따라서 뷰의 위치를 하나하나 잡아줄 필요 없이 뷰를 생성함으로써 부모뷰는 자식뷰에게 위치와 크기를 제안하고 이를 통해 자식뷰는 알아서 제자리를 찾고 크기를 결정한다.

하지만 자식뷰는 부모뷰가 제안한 위치를 기준으로 원하는 위치를 알아서 찾아야 하는 경우가 존재한다.

이때 사용하는 것이 GeometryReader이다.

GeometryReader의 정의

A container view that defines its content as a function of its own size and coordinate space.
콘텐츠를 자체 크기와 좌표 공간의 함수로 정의하는 컨테이너 뷰입니다.

애플 공식문서의 설명에 따르면 Geometry는 컨테이너뷰이고 내부의 콘텐츠를 자체크기와 좌표공간을 포함하는 클로저 함수를 통해 정의한다고 한다.

여기서 크기와 좌표공간을 제공하기 위해 GeometryProxy라는 구조체를 사용하는데 해당 구조체의 정의는 다음과 같다

GeometryProxy | Apple Developer Documentation

A proxy for access to the size and coordinate space (for anchor resolution) of the container view.
컨테이너 뷰(GeometryReader)의 크기와 좌표 공간(앵커 해상도)에 대한 접근을 위한 프록시입니다.

예제

  • GeometryReader은 할당가능한 모든 영역을 차지한다. 아래 예제를 보면 최상위 View는 VStack이고 Stack는 기본적으로 자식뷰의 크기만큼의 공간만 차지한다.
    하지만 GeometryReader(파랑)가 모든 영역을 차지한 것을 확인 할 수 있다.
struct GeometryView: View {
    
    var body: some View {
        VStack{
            GeometryReader{ proxy in
                Text("Hello World~~").background(Color.yellow)
            }
            .background(Color.blue)
        }
        .background(Color.red)
        }
}

참조한 것

Swift: GeometryReader는 무엇일까?

0개의 댓글