我用这个代码来加载我的html
包含文本的文件WKWebView
:
do {
guard let filePath = Bundle.main.path(forResource: "\(readBookNumber)", ofType: "html")
else {
print ("File reading error")
return
}
var content = try String(contentsOfFile: filePath, encoding: .utf8)
let baseUrl = URL(fileURLWithPath: filePath)
content.changeHtmlStyle(font: "Iowan-Old-Style", fontSize: UserDefaults.standard.integer(forKey: "textSize"), fontColor: textColor)
webView.loadHTMLString(headerString+content, baseURL: baseUrl)
}
catch {
print ("File HTML error")
}
这段代码用于加载用户上次停止阅读的页面:
self.webView.scrollView.contentOffset.x = CGFloat(UserDefaults.standard.integer(forKey: "pageToLoad"))
我在此方法中使用加载最后一页的代码:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.webView.scrollView.contentOffset.x = CGFloat(UserDefaults.standard.integer(forKey: "pageToLoad"))
}
}
一开始我用的是deadline: .now() + 0.1
,但这没有用。因为最后阅读的页面是最初加载的,几秒钟后我在第一页上看到了我的文本。我把它改为deadline: .now() + 0.5
并且文本从最后一页读取时加载良好。它有 700 页。但现在我想加载另一篇 1700 页的文本。我和第一次一样遇到同样的问题。我可以改变deadline: .now() + 1.0
我的文本会加载得很好。但我认为这不是最好的解决方案。我在 iPhone X 上运行它。但也许如果我在 iPad mini 2 上运行它,我应该改变deadline: .now() + 10.0
因为iPad mini 2不是很强大。如何解决问题?
基于@DPrice代码更新:
如果我使用这段代码:
override func viewDidLoad() {
super.viewDidLoad()
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil)
....
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if (keyPath == "estimatedProgress") {
if webView.estimatedProgress == 1.0 {
self.webView.scrollView.contentOffset.x = CGFloat(UserDefaults.standard.integer(forKey: "pageToLoad\(self.readBookNumber)"))
}
}
}
我的结果与我的代码相同。
但如果我使用这段代码:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if (keyPath == "estimatedProgress") {
if webView.estimatedProgress == 1.0 {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.webView.scrollView.contentOffset.x = CGFloat(UserDefaults.standard.integer(forKey: "pageToLoad\(self.readBookNumber)"))
}
}
}
}
一切正常。我的最后一页加载正常。但这并不能解决我的问题。