GeometryProxy
- GeometryReader 는 컨테이너 뷰의 한 종류이며, 다른 컨테이너뷰의 ViewBuilder와는 다르게 인자를 하나 받는데 그것이 GeometryProxy 객체다. 실제로 상위 뷰의 정보는 이 객체를 통해 접근이 가능하다. 기본적으로 GeometryProxy 는 size 프로퍼티를 갖고 있다.
- .frame(in: ) 라는 메소드가 있으며, 서브크립트도 지원한다.
GeometryProxy 코드
struct GeometryProxy {
var size: CGSize { get }
var safeAreaInsets: EdgeInsets { get }
func frame(in coordinateSpace: CoordinateSpace) -> CGRect
subscrip<T>(anchor: Anchor<T>) -> T { get }
}
GeometryProxy 속성 | |
size | GeometryReader 의 크기를 반환 |
safeAreaInsets | GeometryReader가 사용된 환경에서의 안전 영역에 대한 크기를 반환 |
frame(in:) | 특정 좌표계를 기준으로 한 프레임 정보를 제공 |
subscript(anchor:) | 자식뷰에서 anchorPreference 수식어를 이용해 제공한 좌표나 프레임을 GeometryReader의 좌표계를 기준으로 다시 변환하여 사용하여 사용하는 첨자다. 이때 Anchor의 제네릭 매개 변수에는 CGRect 또는 CGPoint 타입 두 가지를 사용 할 수 있다. |
기본 코드
struct ContentView : View {
var body: some View {
GeometryReader { geometry in
VStack {
//자식뷰가 10개가 넘어가기때문에 Group으로 자정
Group {
Spacer()
Text("GeometryProxy").bold().font(.system(size: 40)).padding(.bottom,30)
//GeometryProxy size
Text("Size").bold().font(.title)
Text("width: \(Int(geometry.size.width))")
Text("height: \(Int(geometry.size.height))")
.padding(.bottom)
Divider()
//GeometryProxy safeAreaInsets
Text("SafeAreaInsets").bold().font(.title)
Text("top: \(Int(geometry.safeAreaInsets.top))")
Text("bottom: \(Int(geometry.safeAreaInsets.bottom))")
}
Spacer()
Color.yellow
.frame(
width: geometry.size.width,
height: geometry.safeAreaInsets.top,
alignment: .center)
}
}
.edgesIgnoringSafeArea(.bottom)
}
}
실행 화면
개발자 Document
Apple Developer Documentation
developer.apple.com
'Language > Swift' 카테고리의 다른 글
SwiftUI를 이용한 뷰를 겹겹이 쌓기 (ZStack) (0) | 2022.12.08 |
---|---|
SwiftUI를 이용한 그리드 그리기 (LazyVGrid) (2) | 2022.12.05 |
SwiftUI AspectRatio / GeometryReader 이용하기 (0) | 2022.11.29 |
SwiftUI를 이용한 탭 메뉴 만들기 (TabView) (0) | 2022.11.26 |
SwiftUI를 이용한 여러 줄의 텍스트를 입력하기 (TextEditor) (0) | 2022.11.25 |
댓글