我们想打开一个在视图中打开特定位置的WebView。 因此,我们想要在显示之前滚动到锚点或跳转到它。
我们尝试在viewWillAppear
内执行javascript,但它不起作用。如果我们在viewDidAppear
中执行它,我们会跳转到锚点,这不是一个有效的解决方案。
WebContentView(包含单个WebView的UIView
的简单故事板):
class WebContentViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
var fileName: String?
var screenName: String?
override func viewDidLoad() {
super.viewDidLoad()
webView.backgroundColor = UIColor.white
let url = URLRequest(url: Bundle.main.url(forResource: fileName, withExtension: "html")!)
webView.loadRequest(url);
webView.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard let screenName = screenName else {
return
}
webView.stringByEvaluatingJavaScript(from: "window.location.href = '#2-einsatz-von-google-analytics';")
}
override func viewDidAppear(_ animated: Bool) {
//webView.stringByEvaluatingJavaScript(from: "window.location.href = '#2-einsatz-von-google-analytics';") //creates a jump instead of a scrole
}
}
尝试过的解决方案和已知问题:
scrollTo(hash) {location.hash = "#" + hash;}; scrollTo("anchor");
How to scroll HTML page to given anchor using jQuery or Javascript? 我们怎样才能在看到锚点或跳跃之前完成“平滑”滚动?
答案 0 :(得分:0)
如果您熟悉UIScrollView,则应该知道可以使用setContentOffset方法。默认情况下,UIWebView具有scrollView属性:
var scrollView:UIScrollView与Web关联的滚动视图 图。
所以,你可以做的 - 例如:
webView.scrollView.setContentOffset(CGPoint(x: 0, y: 100), animated: true)
,我认为您应该在webView完成加载后使用它,您可以通过实施UIWebViewDelegate - webViewDidFinishLoad来实现这一目标:
func webViewDidFinishLoad(_ webView: UIWebView) {
webView.scrollView.setContentOffset(CGPoint(x: 0, y: 100), animated: true)
}
希望这会有所帮助。