在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(即用户实际上没有滚动任何东西)。
为什么会这样,我该如何预防?
答案 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。