3

我们可以使用下面的方法来计算一个 HTML 页面在一个固定高度的 UIWebView 中的 scrollWidth。

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

是否可以在不将请求加载到 UIWebView 的情况下对本地 HTML 页面进行此评估?

希望这发生在一个单独的线程上。

4

1 回答 1

3

(有点)。需要以某种能力呈现 html 才能获得任何类型的测量值。原因在于 html/css/javascript 协同工作的方式(javascript 修改 html/css 属性,css 修改 html)。如果您必须在不使用 UIWebView 的情况下获得宽度,您将被以下两个选项之一困住:

  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 回答