问题描述
我的代码设置了它从网页获取的导航栏标题,但是每次这都会导致整个 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 的方法?
解决方法
找到问题根源
// 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) {
}
这会阻止视图在每次更新时加载请求。