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