Вы можете использовать KVO для обнаружения любых изменений в свойстве contentOffset
вашего UIWebView
экземпляра.
Предупреждение: будьте осторожны, так как это свойство очень часто меняется при прокрутке, а события в приведенном ниже примере будут появляться очень часто. Не применяйте и не вызывайте дорогостоящую функцию при каждом изменении contentOffset!
Вот пример кода для этого в подклассе UIView
, содержащем UIWebView
:
@IBOutlet weak var webView: UIWebView!
override func awakeFromNib() {
super.awakeFromNib()
webView.delegate = self
webView.scrollView.addObserver(self, forKeyPath: "contentOffset", options: [.New, .Old], context: nil)
}
deinit {
webView.scrollView.removeObserver(self, forKeyPath: "contentOffset", context: nil)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
guard let kp = keyPath else {
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
return
}
if kp == "contentOffset" {
self.scrollViewDidScroll(webView.scrollView)
} else {
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
}
}
func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentSize.height - scrollView.contentOffset.y - scrollView.frame.size.height < 100 {
print("this is the end")
} else if scrollView.contentOffset.y < 100 {
print("this is the beginning")
}
}
Как указано в документации Apple в документации UIWebview, вам следует избегать размещения своего экземпляра UIWebview в UIScrollView для определения конца / начала прокрутки.