SwiftUI에서 GeometryReader는 뷰의 부모가 제공하는 크기와 위치 정보를 제공하여 자식 뷰를 유동적으로 조정할 수 있도록 도와주는 강력한 도구입니다.
GeometryReader란?
GeometryReader는 뷰의 레이아웃 정보를 제공하는 컨테이너입니다. 이를 통해 자식 뷰는 부모 뷰의 크기와 위치를 알 수 있으며, 이러한 정보를 기반으로 뷰의 크기와 위치를 동적으로 조정할 수 있습니다.
https://developer.apple.com/documentation/SwiftUI/GeometryReader
GeometryReader | Apple Developer Documentation
A container view that defines its content as a function of its own size and coordinate space.
developer.apple.com
GeometryReader의 속성과 장점
- 유연한 레이아웃: 부모 뷰의 크기에 따라 자식 뷰의 크기와 위치를 조정할 수 있어 다양한 화면 크기에 적합한 UI를 만들 수 있습니다.
- 상대적 포지셔닝: 글로벌 좌표계를 기준으로 자식 뷰의 위치를 정할 수 있어 복잡한 레이아웃을 구성할 때 유용합니다.
- 동적 크기 조정: 반응형 디자인을 손쉽게 구현할 수 있으며 뷰의 크기가 변경될 때 자동으로 반영됩니다.
GeometryReader의 단점
- 성능 문제: GeometryReader는 뷰의 레이아웃을 계속해서 계산해야 하므로 과도하게 사용하면 성능 저하가 발생할 수 있습니다. 특히 많은 뷰가 중첩되거나 자주 갱신되는 경우 더욱 그렇습니다.
- 복잡한 레이아웃: GeometryReader를 남용하면 코드가 복잡해질 수 있으며 가독성이 떨어지고 유지보수가 어려워질 수 있습니다.
- 고정된 크기 문제: GeometryReader 내부에 위치한 뷰가 부모 뷰의 크기에 의존하게 되면, 고정된 크기로 설정할 경우 의도치 않은 레이아웃이 발생할 수 있습니다.
이전 프로젝트에서 ScrollView와 함께 사용하다 스크롤이 안 되는 문제 때문에 고생했는데 좋다고 너무 남발하는 것은 고생길이..
실제 코드 비교
1. 고정값을 이용한 뷰
2. GeometryReader를 사용한 뷰
결론
이미지에서 볼 수 있듯이 GeometryReader를 사용하면 뷰에서 직접 레이아웃과 포지셔닝에 관여 할 수 있게 된다. GeometryReader는 뷰기 때문에 SwiftUI에서 일반적으로 다룰 수 있는 View Modifier 또한 사용할 수 있다. 좋은 것에는 주의할 점이 분명히 있을 수 있으니 장점을 최대한 활용하되, 남발하지 않도록 조심해서 사용만 한다면 충분히 좋은 UI를 다룰 수 있을 거 같다.