3

以下を使用して、固定の高さのUIWebViewでHTMLページのscrollWidthを計算できます。

[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollWidth"]

UIWebViewにリクエストをロードせずにローカルHTMLページでこの評価を行うことは可能ですか?

これを別のスレッドで発生させたいですか。

4

1 に答える 1

3

いいえ(一種)。あらゆる種類の測定値を取得できるようにするには、HTMLをある程度の容量でレンダリングする必要があります。この理由は、html / css / javascriptが連携する方法に固有のものです(javascriptはhtml / cssプロパティを変更し、cssはhtmlを変更します)。UIWebViewを使用せずに幅を取得する必要がある場合は、次の2つのオプションのいずれかで行き詰まります。

  1. カスタムコード(数千工数、これを行わないでください)を使用する場合でも、オープンソースライブラリを使用する場合でも、ページを自分でレンダリングします。これがUIWebViewよりも高速であり、予期しないバグが発生する可能性があるとは思えません。
  2. バックグラウンドでページを測定し、その値をどこかに保存します。これは基本的に、サイズのキャッシュの形式になります。出荷時からページが静的である場合は、手動で実行し、ハードコーディングします。それらが動的である場合は、起動時にそれらを測定して値を格納するクラスを作成します。動的測定にはUIWebViewが必要です

編集:

UIWebViewがメインスレッドをブロックし、アプリにジャーキネスを引き起こしているため、これを実行しようとしていますか?もしそうなら、あなたはこのようなことを試みることを考えましたか?:

 UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,320,460)];
 webview.delegate = self;
 [webview loadRequest: [NSURLRequest requestWithURL:[NSURL urlFromString:@"/path/to/file.html"]]];

...そして後で...

 - (void) webViewDidFinishLoad:(UIWebView *)webView 
 {
    // run your code to get scroll width of page
 }
于 2012-04-27T21:18:09.510 に答える