当 WKWebView 完成加载 swiftUI 时隐藏视图
Hiding view when WKWebView has finished loading swiftUI
我试图在 WKWebView 完成加载后隐藏启动屏幕。我找到了一种方法来检测 WKWebView 何时完成 didFinish
委托的加载,但我一直隐藏启动屏幕。目前,一旦 WKWebView 完成加载,它将 webViewFinishedLoading
设置为 true,而在 ContentView.swift
中,如果 webViewFinishedLoading
设置为 false,它应该只显示视图。但现在即使在 WKWebView 完成加载后它也只显示启动屏幕。这是我的代码:
ContentView.swift
:
var webViewFinishedLoading = false
struct ContentView: View {
var body: some View {
SwiftUiWebView(url: URL(string: "myUrl"))
ZStack {
if (!webViewFinishedLoading) {
....
}
}
}
}
WebView.swift
....
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if (webView.isLoading) {
return
}
print("Done Loading")
webViewFinishedLoading = true
}
....
我知道 didFinish
被调用是因为我在调试控制台中看到“加载完成”。
你的 View
不会知道重新加载,除非它被 @State
属性 或 ObservableObject
之类的东西触发。您还没有真正从 SwiftUiWebView
中提供足够的代码来显示所有内容,但这里是需要发生的事情的要点:
struct ContentView: View {
@State var webViewFinishedLoading = false
var body: some View {
SwiftUiWebView(url: URL(string: "myUrl"), finishedLoading: $webViewFinishedLoading)
ZStack {
if (!webViewFinishedLoading) {
....
}
}
}
}
struct SwiftUiWebView : UIViewRepresentable {
var url: URL
var finishedLoading: Binding<Bool>
//...
}
然后,您需要将 finishedLoading
绑定传递给您的 Web 视图委托,并在完成加载后将其 .wrappedValue
设置为 true
:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if (webView.isLoading) {
return
}
print("Done Loading")
finishedLoading.wrappedValue = true
}
因为它绑定到一个 @State
变量,您的视图将知道要刷新。
我试图在 WKWebView 完成加载后隐藏启动屏幕。我找到了一种方法来检测 WKWebView 何时完成 didFinish
委托的加载,但我一直隐藏启动屏幕。目前,一旦 WKWebView 完成加载,它将 webViewFinishedLoading
设置为 true,而在 ContentView.swift
中,如果 webViewFinishedLoading
设置为 false,它应该只显示视图。但现在即使在 WKWebView 完成加载后它也只显示启动屏幕。这是我的代码:
ContentView.swift
:
var webViewFinishedLoading = false
struct ContentView: View {
var body: some View {
SwiftUiWebView(url: URL(string: "myUrl"))
ZStack {
if (!webViewFinishedLoading) {
....
}
}
}
}
WebView.swift
....
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if (webView.isLoading) {
return
}
print("Done Loading")
webViewFinishedLoading = true
}
....
我知道 didFinish
被调用是因为我在调试控制台中看到“加载完成”。
你的 View
不会知道重新加载,除非它被 @State
属性 或 ObservableObject
之类的东西触发。您还没有真正从 SwiftUiWebView
中提供足够的代码来显示所有内容,但这里是需要发生的事情的要点:
struct ContentView: View {
@State var webViewFinishedLoading = false
var body: some View {
SwiftUiWebView(url: URL(string: "myUrl"), finishedLoading: $webViewFinishedLoading)
ZStack {
if (!webViewFinishedLoading) {
....
}
}
}
}
struct SwiftUiWebView : UIViewRepresentable {
var url: URL
var finishedLoading: Binding<Bool>
//...
}
然后,您需要将 finishedLoading
绑定传递给您的 Web 视图委托,并在完成加载后将其 .wrappedValue
设置为 true
:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if (webView.isLoading) {
return
}
print("Done Loading")
finishedLoading.wrappedValue = true
}
因为它绑定到一个 @State
变量,您的视图将知道要刷新。