SwiftUI는 선언형 UI라고 한다. 따라서 뷰의 위치를 하나하나 잡아줄 필요 없이 뷰를 생성함으로써 부모뷰는 자식뷰에게 위치와 크기를 제안하고 이를 통해 자식뷰는 알아서 제자리를 찾고 크기를 결정한다.
하지만 자식뷰는 부모뷰가 제안한 위치를 기준으로 원하는 위치를 알아서 찾아야 하는 경우가 존재한다.
이때 사용하는 것이 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)의 크기와 좌표 공간(앵커 해상도)에 대한 접근을 위한 프록시입니다.
struct GeometryView: View {
var body: some View {
VStack{
GeometryReader{ proxy in
Text("Hello World~~").background(Color.yellow)
}
.background(Color.blue)
}
.background(Color.red)
}
}
