这似乎是一个常见的问题,但是我找不到合适的解决方案。我正在尝试调整一堆UIWebView的大小以适合其内容,但是它似乎无法正常工作。到目前为止,我找到的最佳解决方案是this answer,但它似乎在我的解决方案中偶尔起作用。这个想法是在webViewDidFinishLoad:
委托方法中调整UIWebView的大小。但是,这仍然没有正确的大小。如果我在webViewDidFinishLoad:
之后的某个不确定的时间触发更新,则内容的大小会正确调整。
我将在下面描述我的情况,并将相关源粘贴到Gist上。
问题描述
我遇到从JSON API获取数据并在webview中显示数据的情况。 API返回一个对象数组,每个对象都有一个“内容”字段,其中包含HTML格式的文本。设计师提供了一种结构,其中包含一个(大部分)隐藏视图,您向上滑动即可显示该视图,其中包含所有内容的滚动视图,并以非常特殊的方式进行了格式化。
为实现此目的,我有三个视图控制器:主视图控制器,在主视图控制器上向上滑动以显示的辅助视图控制器,以及显示JSON API结果中的html格式的内容的第三视图控制器。 。
辅助视图控制器包含一个UIScrollView和一个第三视图控制器数组。每个第三级视图控制器都包含一个UIWebView(用于显示HTML格式的内容)和用于显示JSON对象的其他属性的标签。由于第三视图将显示在第二视图的UIScrollView内,因此需要调整第三视图的UIWebView的大小以适合其内容,并禁用用户交互,以防止在滚动视图中混淆滚动视图场景。
使所有这些工作正常进行的过程如下:
首先,在主控制器ViewDidLoad上,加载并显示辅助视图
以及活动指示器,这样用户界面就不会死机
接下来,从JSON API加载数据
从API加载数据后(通过委托进行通知),构造第三级
查看控制器,从加载的数据中设置其属性,并将其添加到辅助控制器
控制器列表。
完成后,调用辅助控制器的设置方法。该方法循环
通过第三级控制器列表并依次调用其设置方法
每个三级控制器的设置方法都设置标签的文本并设置标签的文本。
使用loadHTMLString:
和预定义html文件内容的UIWebView内容,
并替换了JSON对象的内容。
在三级控制器的webViewDidFinishLoad:
委托方法上,使用
this answer中的方法,根据内容大小调整Web视图的大小。
调整三级控制器视图的大小以适合网络视图,并放置所有
进入网络视图
然后,第三级控制器调用一个委托方法来通知第二级控制器
它已经完成加载。辅助控制器保持标签上哪个
第三级控制器已完成加载。
当所有第三控制器完成加载后,第二控制器循环
通过其列表并将第三级视图添加到其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/