当前位置: 首页 > news >正文

SwiftUI获取子View的frame

可以通过PreferenceKey获取子View的Frame, 直接上货

用了backgroundPreferenceValue,是因为onPreferenceChange会丢失信息,

struct FramePreferenceKey: PreferenceKey {
    static var defaultValue: CGRect = .zero
    static func reduce(value: inout CGRect, nextValue: () -> CGRect) {}
}

extension View {
    func getFrame(onChange: @escaping (CGRect) -> Void) -> some View {
        background(
            GeometryReader { geo in
                let frame = geo.frame(in: .global)
                Color.clear.preference(key: FramePreferenceKey.self, value: frame)
            }
        )
            .backgroundPreferenceValue(FramePreferenceKey.self) { frame in
                return Color.clear.onAppear {
                    onChange(frame)
                }.id(frame.maxY)
            }
    }
}

相关文章:

  • C++-std:tuple元组的基本用法
  • 【SpringMVC】SpringMVC的入门
  • TensorFlow性能分析调研
  • 四、网络层(二)路由算法与路由选择协议
  • Shiro与SpringBoot整合
  • Netflix Eureka 2.0.0正式发布:借尸还魂还是虚晃一枪?
  • 3分钟搞清楚 JVM逃逸分析
  • 用维度概念来定义初级、中级、高级程序员
  • 脉冲神经网络(SNN)论文阅读(四)-----IJCAI-2022 多级发射方法的脉冲神经网络
  • 外行人如何通过学习软件测试转行IT
  • 线程池
  • 【表格合并与底纹】vue-elementul表格简单实现合并单元格,与列和行给底纹颜色
  • Go语言 Gin处理请求参数
  • 盘点导致Spring事务失效的4个场景
  • 网上到处转行编程成功的,现实中真的容易吗?
  • 智慧车行预约小程序,汽车保养、维修、美容、检测预测小程序,前后端完整代码包括车行动态,养车常识,保养预约,维修预约,洗车美容预约
  • 【Oracle】Oracle学习笔记
  • 设计vue3组件
  • mysql5.7主从复制配置
  • 如何写SCI论文