[SwiftUI] 자신의 뷰의 크기 구하기

조영훈·2022년 8월 27일
0
struct SizePreferenceKey: PreferenceKey {
  static var defaultValue: CGSize = .zero
  static func reduce(value: inout CGSize, nextValue: () -> CGSize) {}
}
extension View {
  func readSize(onChange: @escaping (CGSize) -> Void) -> some View {
    background(
      GeometryReader { geometryProxy in
        Color.clear
          .preference(key: SizePreferenceKey.self, value: geometryProxy.size)
      }
    )
    .onPreferenceChange(SizePreferenceKey.self, perform: onChange)
  }
}

예시

Rectangle()
    .foregroundColor(Color.red)
    .frame(maxWidth: .infinity, maxHeight: .infinity)
    .readSize { new in
        print(new)
    }

출처
stackoverflow

0개의 댓글