为什么WKWebView在初始化时调用scrollviewDidScroll以及如何防止它?

时间:2015-02-23 09:27:33

标签: ios uiscrollview uiscrollviewdelegate wkwebview

在UIViewController中,我实例化一个WKWebView并将视图控制器设置为WKWebiew scrollview的委托:

class MyViewController: UIViewController, UIScrollViewDelegate {

    var webView : WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        webView = WKWebView(frame: self.view.frame)
        view = webView      

        webView.loadHTMLString("<h1>hello</h1>", baseURL: NSURL(string: "http://www.google.com")!)

        webView.scrollView.delegate = self
    }

    func scrollViewDidScroll(scrollView: UIScrollView) {
        println("didScroll")
    }

我遇到的问题是,一旦创建了WKWebView就会调用scrollViewDidScroll(即用户实际上没有滚动任何东西)。

为什么会这样,我该如何预防?

2 个答案:

答案 0 :(得分:2)

在scrollViewWillBeginDragging方法中将bool值设置为true,该方法仅在用户滚动时调用,并且WKWebview不会自动调用它。

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

    scrollByDragging = true
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {

   if !scrollByDragging{

       UIView.animate(withDuration: 0.01) {
         scrollView.setContentOffset(.zero, animated: true)
       }
    }
}

答案 1 :(得分:0)

如果您使用contentOffset,则可以检测到用户滚动的时间。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y >= 0 {
        print("didScroll")
    }
}

如果UIScrollView位于UINavigationController内,contentOffset.y将从-44开始,但实际上可以使用0。