Как я могу программно прокрутить до конца в UIWebView? - PullRequest
9 голосов
/ 29 августа 2010

Я знаю, что подобный вопрос задавался ранее, но, похоже, на него никогда не отвечали. У меня есть UIWebView и добавить контент по строке. Я использую UIWebView, потому что динамически добавляю в него некоторые изображения, а также использую другие функции HTML. Этот пример кода упрощен.

NSString *myHtmlString = @"SOME LONG TEST STRING 1234567890 123456789 0123456789 0123456789 0123456789 01234567890 WWWWWWWWWW WWWWWWWWWW WWWYYYYYYY YYYYYYYYYY YYYYYYYYYY YYYYYYYYYY YYYYYYYYYY YYYYYYYYY YYYYYYYWWW WWWWWWWWWW WWWWWWWWWW WWWXXXXXXX XXXXXXXXXX XXXZZZZZZZ THIS IS THE END I WANT TO SEE";
NSString *myPath = [[NSBundle mainBundle] bundlePath];
NSURL *myBaseURL = [NSURL fileURLWithPath:myPath];
[myWebView loadHTMLString:myHtmlString baseURL:myBaseURL];

То, что я хочу увидеть, это конец строки. Я могу прокрутить там, нет проблем. Но я хочу пойти туда программно.

Ответы [ 4 ]

24 голосов
/ 29 августа 2010

Это довольно просто.Сначала вам нужно получить высоту веб-страницы:

NSInteger height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] intValue];

Теперь у вас есть высота документа, хранящаяся в переменной высоты.Для прокрутки вниз, вы должны снова использовать javascript:

NSString* javascript = [NSString stringWithFormat:@"window.scrollBy(0, %d);", height];   
[webView stringByEvaluatingJavaScriptFromString:javascript];

Конечно, вам нужно вызвать их в нужный момент.Это

– webViewDidFinishLoad:(UIWebView *)webView

метод вашего делегата веб-просмотра.

Надеюсь, это было полезно, Павел

8 голосов
/ 03 октября 2012

в iOS 5+ вы можете вызвать следующий метод из вашего -(void)webViewDidFinishLoad:(UIWebView *)webView

- (void)webViewScrollToBottom:(UIWebView *)webView
{
    CGFloat scrollHeight = webView.scrollView.contentSize.height - webView.bounds.size.height;
    if (0.0f > scrollHeight)
        scrollHeight = 0.0f;
    webView.scrollView.contentOffset = CGPointMake(0.0f, scrollHeight);
}
4 голосов
/ 08 августа 2013

Вот как можно прокрутить вниз Анимированные :

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
        CGPoint bottomOffset = CGPointMake(0, self.myWebView.scrollView.contentSize.height - self.myWebView.scrollView.bounds.size.height);
        [self.myWebView.scrollView setContentOffset:bottomOffset animated:YES];
}
1 голос
/ 23 апреля 2018

SWIFT 4.x

Вот как можно прокрутить вниз Анимированные :

func webViewDidFinishLoad(_ webView: UIWebView) {
    var scrollHeight: CGFloat = webView.scrollView.contentSize.height - webView.bounds.size.height
    if (0.0 > scrollHeight) {
        scrollHeight = 0.0
    }
    webView.scrollView.setContentOffset(CGPoint.init(x: 0.0, y: scrollHeight), animated: true)
}
...