ios - 获取样式化的 UIWebView 内容的大小 - 不太有效

标签 ios uiwebview

这似乎是一个常见问题,但我找不到合适的解决方案。我正在尝试重新调整一堆 UIWebView 的大小以适合它们的内容,但它似乎无法正常工作。到目前为止我找到的最佳解决方案是 this answer ,但它似乎只是偶尔在我的解决方案中起作用。这个想法是在 webViewDidFinishLoad: 委托(delegate)方法中重新调整 UIWebView 的大小。但是,这仍然没有得到正确的尺寸。如果我在 webViewDidFinishLoad: 之后的某个未定义时间触发更新,内容会正确调整大小。

我将在下面描述我的情况,并将相关来源粘贴到Gist .

问题描述

我有一种情况,我从 JSON API 获取数据并在 WebView 中显示数据。 API 返回一个对象数组,每个对象都有一个包含 HTML 格式文本的“内容”字段。设计师给出了一个结构,其中包含一个(大部分)隐藏 View ,您向上滑动即可显示该 View ,其中包含所有内容的 ScrollView ,以非常特殊的方式格式化。

为了实现这一点,我有三个 View Controller :主视图 Controller ,您在主视图 Controller 上向上滑动以显示的辅助 View Controller ,以及显示来自JSON API 结果。
二级 View Controller 包含一个 UIScrollView 和一个三级 View Controller 数组。每个三级 View Controller 都包含一个 UIWebView 来显示 HTML 格式的内容,以及用于显示 JSON 对象的其他属性的标签。因为三级 View 将显示在二级 View 的 UIScrollView 内,所以三级 View 的 UIWebView 需要重新调整大小以适应其内容,并禁用用户交互以防止混淆 ScrollView 中的 ScrollView 场景。

让所有这些工作的过程如下:

  1. 首先,在主 Controller ViewDidLoad 上加载并显示辅助 View 和一个事件指示器,这样 UI 就不会出现卡住状态
  2. 接下来,从 JSON API 加载数据
  3. 当来自 API 的数据已加载(通过委托(delegate)通知)时,构建第三级 View Controller ,从加载的数据中设置它们的属性并将它们添加到辅助 Controller 列表。
  4. 完成后,调用辅助 Controller 的设置方法。这个方法循环 通过三级 Controller 列表并依次调用它们的设置方法
  5. 每个三级 Controller 的设置方法设置标签的文本并设置 使用 loadHTMLString: 的 UIWebView 的内容和预定义的 html 文件的内容, 替换为 JSON 对象的内容。
  6. 在三级 Controller 的 webViewDidFinishLoad: 委托(delegate)方法中,使用 方法在 this answer ,根据内容大小调整 WebView 的大小。
  7. 调整三级 Controller View 的大小以适应 WebView 并放置任何标签 进入 WebView 下方
  8. 然后三级 Controller 调用委托(delegate)方法通知二级 Controller 它已经完成加载。辅助 Controller 密切关注它的哪个 三级 Controller 已完成加载。
  9. 当所有三级 Controller 加载完成后,二级 Controller 循环 通过它的列表并将三级 View 添加到它的 UIScrollView 的内容中,调整 框架和内容高度。

最佳答案

如果你使用的是 iOS 5.0,你可能会使用 webview.scrollView.contentsize,否则你也可以通过 javascript 获取内容大小。

CGFloat newHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] floatValue];

或者替代地

CGFloat newHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight;"] floatValue];

关于ios - 获取样式化的 UIWebView 内容的大小 - 不太有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11641252/

相关文章:

ios - iOS 7 中的单点登录 (SSO)

ios - 编程 UITextField 以在按下 'Return' 时转到下一行?

iOS swift : UIWebView has extremely big content

html - UIWebView 中的本地 html,带有 Assets 目录中的图像

iOS - 防止 UIAppearance 设置更改 UIWebView 输入附件 View

iOS 6.1.3 Mobile Safari/UIWebView 发送错误的区域设置区域代码

ios - iOS 上类似 ORM 的功能

android - Google AdMob 类型

ios - 为什么我的 ImageView 不动?

html - UIWeb View : css ignored