簡體   English   中英

滾動以錨定在webView中

[英]Scroll to anchor in webView

我們想打開一個在視圖中打開了特定位置的WebView。 因此,在顯示錨之前,我們想滾動到錨或跳到錨。

我們試圖在viewWillAppear內部執行一個javascript,但是它不起作用。 如果我們在viewDidAppear執行它,我們將跳轉到錨點,這不是有效的解決方案。

WebContentView(具有包含單個WebView的UIView簡單Storyboard):

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
    }
}

嘗試過的解決方案和已知問題:

我們如何才能完成“平滑”滾動到錨點或在可見之前進行跳轉?

如果您熟悉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)
}

希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM