滚动到webView

时间:2016-10-24 08:57:31

标签: javascript html ios swift uiwebview

我们想打开一个在视图中打开特定位置的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
    }
}

尝试过的解决方案和已知问题:

我们怎样才能在看到锚点或跳跃之前完成“平滑”滚动?

1 个答案:

答案 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)
}

希望这会有所帮助。