9

我正在尝试滚动到我在 UIWebView 中加载的 pdf 文档中的特定页面。我可以使用以下方法在 iOS 5 中毫无问题地做到这一点:

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

但是,这仅在页面已经加载到视图中并且滚动到由用户操作触发时才有效。对于我想将新的 pdf 加载到特定页面的 webview 的情况,我遇到了麻烦。我正在请求加载新的 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。

任何想法将不胜感激。

谢谢!

4

1 回答 1

1

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

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

并滚动到 webview 中的某个位置,您可以执行以下操作:

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

你觉得它很有用。

于 2015-01-08T08:04:40.363 回答