【问题标题】:UIWebView content size always returning the same valueUIWebView 内容大小总是返回相同的值
【发布时间】:2013-05-27 00:10:52
【问题描述】:

我已经坚持了好几个小时了。我正在尝试根据 UIWebView 的内容大小动态调整其大小。我的问题是,当我在 iPhone 5 上运行我的应用程序时一切正常,但在 iPhone 4 上(以及在模拟器上 - 3.5 英寸)上我没有得到相同的行为。

- (void)webViewDidFinishLoad:(UIWebView *)webview {

    CGFloat height = webview.scrollView.contentSize.height;
    _descriptionHeight = height;
    self.webView.scrollView.scrollEnabled = NO;
    self.webView.scrollView.bounces = NO;
}

使用我的这个版本的代码,在 iPhone 4 上,height 始终等于 0,无论内容是什么。我还尝试使用 JS 计算它

[[webview stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue]

但在这种情况下,返回值始终为 480(即屏幕高度)。

这两种方法在 iPhone 5 上都可以正常工作,问题只在 iPhone 4 上(都运行 iOS6)。

有什么想法吗?

编辑: 我设法找到了重现问题的方法。我有一个包含一个部分的表格视图,8 个静态单元格。我的 webview 在第 4 个单元格内(从顶部开始,行 = 3)。如果我将单元格移动到第一个位置(行 = 0),一切正常。如果我将它移回第四个位置,我可以重现我的问题。大家觉得可能是什么。 UITableView 中的错误?

【问题讨论】:

  • 我刚刚在 iPhone 4 (iOS6) 和模拟器 (iOS5 & iOS6) 上试用了您的代码,对我来说效果很好。我无法重现您遇到的问题。问题可能在于您如何设置UIWebView,而不是webViewDidFinishLoad:。对不起,我帮不上什么忙了。
  • @StephSharp 感谢您的尝试。我的 webView 设置在故事板中,所以也许我会尝试重做那个屏幕。

标签: ios uiwebview


【解决方案1】:

我找到了。看了我的屏幕后,我最终意识到在 iPhone 5 上,当屏幕加载时会显示包含我的UIWebView 的单元格,就像 iPhone 4 一样,因为屏幕更小,我不得不滚动一点看看我的手机。

我认为,在 iPhone 4 上,由于最初看不到 web 视图,这就是为什么我不断得到有趣的结果。

我最终将webView loadHTMLString: 选择器移到了

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

现在一切正常。

所以我设法解决了我的问题,但是如果有人能解释为什么你不能在 UITableView 中获得当前不可见的 UIWebView 的内容大小,我将不胜感激。

【讨论】:

  • UITableView 仅加载可见的单元格。滚动时会加载其他单元格并且它们变得可见。因此,如果您的UIWebView 位于不在屏幕上的单元格中,则它尚未加载,因此高度为 0。在Apple's doco for UITableView 中,cellForRowAtIndexPath: 返回“表示表格单元格的对象或如果单元格不可见或 indexPath 超出范围,则为零。"
  • @StephSharp 谢谢。我知道UITableView 只加载可见单元格,但我的webViewDidFinishLoad 怎么仍然被调用?
猜你喜欢
  • 2010-12-21
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多