Swiftui:使用PreferenceKey联动改变控件的大小(GeometryReader)

  • 1、自定义preferenceKey
struct RectangleGeometrySizePreferenceKey: PreferenceKey {
    static var defaultValue: CGSize = .zero
    
    static func reduce(value: inout CGSize, nextValue: () -> CGSize) {
        value = nextValue()
    }
}
  • 2、扩展View添加方法
extension View {
    func updateRectangleGeoSize(_ size: CGSize) -> some View {
        preference(key: RectangleGeometrySizePreferenceKey.self, value: size)
    }
}
  • 3、使用例子
struct GeometryPreferenceBootCamp: View {
    // MARK: -  PROPERTY
    @State private var rectSize: CGSize = .zero
    // MARK: -  BODY
    var body: some View {
        VStack(spacing: 50) {
            Text("Hello")
                .frame(width: rectSize.width, height: rectSize.height)
                .background(Color.blue)
            
            
            HStack {
                Rectangle()
                
                GeometryReader { geo in
                    Rectangle()
                        .updateRectangleGeoSize(geo.size)
                }
                
                Rectangle()
            }
            .frame(height: 55)
        } //: VSTACK
        .onPreferenceChange(RectangleGeometrySizePreferenceKey.self) { value in
            self.rectSize = value
        }
    }
}
  • 4、效果图


    16603830306264.jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容