如何阻止 SwiftUI 重新加载我通过 UIViewRepresentable 使用的 WKWebView 页面?
Posted
技术标签:
【中文标题】如何阻止 SwiftUI 重新加载我通过 UIViewRepresentable 使用的 WKWebView 页面?【英文标题】:How do I stop SwiftUI from reloading WKWebView page that I am using via UIViewRepresentable? 【发布时间】:2021-03-12 09:57:07 【问题描述】:我的代码设置了它从网页获取的导航栏标题,但是每次这都会导致整个 WKWebView 重新加载...页面很重,所以会消耗很多时间。使用按钮设置标题时的行为相同。
struct TransitScreen: View, HandlerDelegate
var urlRequest: URLRequest
@State var pageTitle = "Title 1"
var body: some View
VStack
KSWebView(urlRequest: urlRequest, delegate: self) // WKWebView using UIViewRepresentable
NavigationLink("Go", destination: Text("Some Data"))
Button(action:
pageTitle = "replaced \(Date().toSeconds())"
)
Text("Change title")
.navigationBarTitle(Text(pageTitle))
.edgesIgnoringSafeArea(.top)
func process(data: String)
pageTitle = data
有没有办法阻止这种情况发生?或其他方法来更新 navigationBarTitle?
【问题讨论】:
你怎么知道 WKWebView 被重新加载了? 网页重新加载显示加载动画,在页面加载或刷新时触发 【参考方案1】:找到问题的根源
// KSWebView.swift
func updateUIView(_ uiView: WKWebView, context: Context)
uiView.load(urlRequest)
改成
func makeUIView(context: Context) -> WKWebView
// TODO: Check this hacky code and find some replacement
let headerHeight = CGFloat(100)
let webViewHeight = UIScreen.main.bounds.height - headerHeight
let webViewFrame = CGRect(x: 0, y: headerHeight, width: UIScreen.main.bounds.width, height: webViewHeight)
let webView = WKWebView(frame: webViewFrame, configuration: config())
webView.load(urlRequest)
self.webView = webView
return webView
func updateUIView(_ uiView: WKWebView, context: Context)
这会阻止视图在每次更新时加载请求。
【讨论】:
以上是关于如何阻止 SwiftUI 重新加载我通过 UIViewRepresentable 使用的 WKWebView 页面?的主要内容,如果未能解决你的问题,请参考以下文章