Amy*_*Amy 3 swift wkwebview swiftui
我试图在 WKWebView 加载完成后隐藏启动屏幕。我找到了一种方法来检测 WKWebView 何时完成委托加载didFinish,但我一直坚持隐藏启动屏幕。目前,webViewFinishedLoading一旦 WKWebView 完成加载,它将设置为 true,并且在 中,如果设置为 false,ContentView.swift则它应该只显示视图。webViewFinishedLoading但现在即使 WKWebView 加载完成后它也只显示启动屏幕。这是我的代码:
ContentView.swift:
var webViewFinishedLoading = false
struct ContentView: View {
var body: some View {
SwiftUiWebView(url: URL(string: "myUrl"))
ZStack {
if (!webViewFinishedLoading) {
....
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
WebView.swift
....
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if (webView.isLoading) {
return
}
print("Done Loading")
webViewFinishedLoading = true
}
....
Run Code Online (Sandbox Code Playgroud)
我知道它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) {
....
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
struct SwiftUiWebView : UIViewRepresentable {
var url: URL
var finishedLoading: Binding<Bool>
//...
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要将该finishedLoadingBinding 传递给您的 Web 视图委托,并在加载完成后将其设置.wrappedValue为:true
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if (webView.isLoading) {
return
}
print("Done Loading")
finishedLoading.wrappedValue = true
}
Run Code Online (Sandbox Code Playgroud)
因为它与变量绑定@State,所以您的视图将知道刷新。
| 归档时间: |
|
| 查看次数: |
2073 次 |
| 最近记录: |