我试图滚动到UIWebView中已加载的pdf文档中的特定页面。我可以使用以下命令在iOS 5中做到这一点而不会出现问题:

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

但是,只有在页面已被加载到 View 中并且用户操作触发了滚动到该 View 时,此方法才起作用。对于要将新的pdf加载到特定页面的Web View 中的情况,我遇到了麻烦。我请求加载新的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。

任何想法将不胜感激。

谢谢!

最佳答案

要获取Web View 中包含的内容大小或页面数,您可以执行以下操作:

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

并滚动到Web View 中的某个位置,您可以执行以下操作:
    [mywebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(%d,0);",xPosition]];

您会发现它很有用。

关于pdf - UIWebView内容高度在scrollview.contentsize中不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9013754/

10-10 17:35