当前位置: 首页 > 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)
            }
    }
}

相关文章:

  • 餐饮网站制作/免费发布推广信息网站
  • 什么是网站镜像/百度网盘电脑版下载
  • 给鹤壁政府网站做维护的是那个公司/指数基金怎么买
  • 海拉尔网站建设公司/艾滋病多久能检查出来
  • 网站代码 公告栏 php/sem竞价课程
  • 解决网站提示有风险/公司网站建设哪家公司好
  • C++-std:tuple元组的基本用法
  • 【SpringMVC】SpringMVC的入门
  • TensorFlow性能分析调研
  • 四、网络层(二)路由算法与路由选择协议
  • Shiro与SpringBoot整合
  • Netflix Eureka 2.0.0正式发布:借尸还魂还是虚晃一枪?
  • 3分钟搞清楚 JVM逃逸分析
  • 用维度概念来定义初级、中级、高级程序员
  • 脉冲神经网络(SNN)论文阅读(四)-----IJCAI-2022 多级发射方法的脉冲神经网络
  • 外行人如何通过学习软件测试转行IT
  • 线程池
  • 【表格合并与底纹】vue-elementul表格简单实现合并单元格,与列和行给底纹颜色