swiftUI 监听 webview 高度
要监听 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 的值
原文地址: https://www.cveoy.top/t/topic/iccq 著作权归作者所有。请勿转载和采集!