要监听 WebView 的高度,可以使用 SwiftUI 的 GeometryReader 来获取 WebView 的大小,并将其绑定到一个变量上。

首先,在视图中创建一个 @State 变量来存储 WebView 的高度:

@State private var webViewHeight: CGFloat = .zero

然后,在视图中嵌套一个 GeometryReader,将 WebView 放在其中,并使用 onPreferenceChange 修饰符来监听 WebView 的大小变化:

GeometryReader { geometry in
    WebView(url: yourURL)
        .frame(height: webViewHeight)
        .onPreferenceChange(WebViewHeightPreferenceKey.self) { preferences in
            webViewHeight = geometry.size.height
        }
}

其中,WebView 是一个自定义的视图,用来显示 WebView。

WebView 中,需要使用 PreferenceKey 来传递 WebView 的高度信息。首先,创建一个 PreferenceKey 的子类,用于存储 WebView 的高度:

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

然后,在 WebView 的 body 中,使用 GeometryReader 来获取 WebView 的大小,并将其存储到 PreferenceKey 中:

var body: some View {
    GeometryReader { geometry in
        WebViewRepresentable(url: url)
            .preference(key: WebViewHeightPreferenceKey.self, value: geometry.size.height)
    }
}

这样,当 WebView 的大小发生变化时,onPreferenceChange 会被触发,从而更新 webViewHeight 的值

swiftUI 监听 webview 高度

原文地址: https://www.cveoy.top/t/topic/iccq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录