Вот как бы я это сделал.
UIWebView
соответствует UIScrollViewDelegate
.Используйте обратный вызов - (void)scrollViewDidScroll:(UIScrollView *)scrollView
, чтобы отслеживать, когда ваша UIWebView
прокручивается:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//The webview is is scrolling
int xPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollX"] intValue];
int yPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue];
}
Теперь этот метод будет вызываться всякий раз, когда прокручивается ваш webView.Ваш веб-просмотр будет прокручиваться вниз, когда:
webView_content_height - webView(y) = webView.frame.height; //pseudo code
Ваш обратный вызов делегата теперь будет выглядеть следующим образом:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//The webview is is scrolling
int xPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollX"] intValue];
int yPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue];
if([webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] - yPosition == webView.frame.height)
{
//The user scrolled to the bottom of the webview
}
}
Чтокод переводится в то, что когда пользователь прокручивает до нижней части содержимого, разница между y-позицией webView (которая является y-координатой верхнего левого угла webView) и нижней частью содержимого будет равна высотерамка веб-просмотра.Код действует при условии выполнения этого условия для входа в условие if
.
Чтобы быть в безопасности, вы можете изменить условие if
, чтобы иметь поле для ошибки (может быть + или - 10пикселей).