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 になります。
どんなアイデアでも大歓迎です。
ありがとう!