这似乎是一个常见问题,但我找不到合适的解决方案.我正在尝试重新调整一堆UIWebView以适应他们的内容,但它似乎无法正常工作.到目前为止,我发现的最佳解决方案是这个答案,但它似乎只是偶尔在我的解决方案中工作.我们的想法是在webViewDidFinishLoad:委托方法中重新调整UIWebView的大小.但是,这仍然无法获得正确的尺寸.如果我在引发一些不确定的时间更新后 webViewDidFinishLoad:,内容不会得到正确的大小.
我将在下面描述我的情况,我将在Gist上粘贴相关的来源.
问题描述
我有一种情况,我从JSON API获取数据并在webview中显示数据.API返回一个对象数组,每个对象都有一个带有HTML格式文本的"content"字段.设计师给出了一个结构,其中包含一个(大部分)隐藏视图,您可以向上滑动显示,其中包含所有内容的滚动视图,以非常特殊的方式格式化.
为了实现这一点,我有三个视图控制器:主视图控制器,在主视图控制器上向上滑动以显示的辅助视图控制器,以及从JSON API结果显示一个html格式内容项的三级视图控制器.
辅助视图控制器包含UIScrollView和一组第三视图控制器.每个第三视图控制器都包含一个UIWebView,用于显示HTML格式的内容,以及用于显示JSON对象的其他属性的标签.因为第三视图将显示在辅助视图中的UIScrollView内,所以需要重新调整第三视图的UIWebView以适合其内容并禁用用户交互以防止滚动视图中的滚动视图混乱场景.
使所有这些工作的过程如下:
loadHTMLString:预定义的html文件的内容设置UIWebView 的内容,并替换JSON对象的内容.webViewDidFinishLoad:委托方法上,使用此答案中的方法,根据内容大小重新调整Web视图的大小.小智 6
如果您使用的是iOS 5.0,则可以使用webview.scrollView.contentsize,否则您也可以通过javascript获取内容大小.
CGFloat newHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] floatValue];
Run Code Online (Sandbox Code Playgroud)
或者
CGFloat newHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight;"] floatValue];
Run Code Online (Sandbox Code Playgroud)