Высота содержимого UIWebView не точна в scrollview.contentsize - PullRequest
9 голосов
/ 26 января 2012

Я пытаюсь перейти к определенной странице в документе PDF, который я загрузил в UIWebView. Я могу сделать это без проблем в iOS 5, используя:

pageHeight = webView.scrollView.contentSize.height / numberOfPages;
[[webView scrollView] setContentOffset:CGPointMake(0,pageNumber*pageHeight) animated:YES];

Однако это работает только в том случае, если страница уже загружена в представление и прокрутка до запускается действием пользователя. В случае, когда я хочу загрузить новый PDF-файл в веб-просмотр для конкретной страницы, у меня возникли проблемы. Я запрашиваю загрузку нового pdf, а затем делаю что-то вроде следующего, когда страница завершит загрузку:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    int contentHeight = myWebView.scrollView.contentSize.height;
    int pageHeight = contentHeight / 5; // 5 total pages in example PDF
    int scrollDelta = pageHeight*2; // Scroll forward 2 pages

    [[myWebView scrollView] setContentOffset:CGPointMake(0,scrollDelta) animated:YES];
}

Хотя myWebView.scrollView.contentSize.height - это полная высота документа, когда я запускаю аналогичный код по нажатию кнопки после загрузки исходного документа, когда я загружаю новый документ и запускается webViewDidFinishLoad, myWebView.scrollView.contentSize.height равен высота UIWebview, а не содержимое внутри него. Это, конечно, делает pageHeight намного меньше, чем нужно, и не прокручивает в правильную позицию.

Я пробовал такие хаки, как задержка кода прокрутки на некоторое время после того, как webViewDidFinishLoad подумал, может быть, страница не полностью загружена, хотя я получаю обратный вызов, но в этих случаях contentSize.height по какой-то причине равен 0.

Любые идеи будут с благодарностью.

Спасибо!

1 Ответ

1 голос
/ 08 января 2015

, чтобы получить размер контента или количество страниц, содержащихся в веб-просмотре, вы можете сделать следующее:

    float w = [[mywebview stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].scrollWidth;"] floatValue];
    int pageCount = ceil(w/self.view.frame.size.width);

и для перехода к определенной позиции в вашем веб-просмотре вы можете сделать следующее:

    [mywebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(%d,0);",xPosition]];

Вы находите это полезным.

...