본문 바로가기
Language/Swift

SwiftUI에서 GeometryProxy 사용하기

by IFLA 2022. 12. 1.

 

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

 

Apple Developer Documentation

 

developer.apple.com

 

댓글


\