我有一个包含一些标签的视图控制器和一个正在其中加载一些 html 的 UIWebView。所有这些标签和 UIWebView 都是 UIScrollView 的子视图。我已禁用 UIWebView 的滚动,因此标签和 UIWebView 在 UIScrollView 内一起滚动。
然后我在UiWebView里面找到了内容的大小,根据内容大小改变了UIWebView的大小,然后将滚动视图的大小设置为webview的大小。这就是我在 webViewDidFinishLoad 中添加以下代码的方法:
CGRect frame = myWebView.frame;
frame.size.height = 1;
myWebView.frame = frame;
CGSize fittingSize = [myWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
myWebView.frame = frame;
NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
mainScrollView.contentSize = myWebView.bounds.size;
当我使用 NSLog 查看 webview 内容的大小时,我注意到它为相同的内容提供了不同的高度。例如,如果我第一次打开视图控制器,它显示高度等于 915.0,当我在导航中返回并返回此视图控制器时,日志将显示大小为 1012.0。
我相信这可能是由于 html 内容中加载了图像。谁能告诉我如何修复它以第一次显示正确的高度?谢谢!
更新:如果我使用 javascript 使用不同的策略,我已经尝试使用以下代码:
CGRect oldBounds = [[self myWebView] bounds];
CGFloat height = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
NSLog(@"NEW HEIGHT %f", height);
[myWebView setBounds:CGRectMake(oldBounds.origin.x, oldBounds.origin.y, oldBounds.size.width, height)];
mainScrollView.contentSize = myWebView.bounds.size;
这段代码每次在日志中都给了我正确的高度,这正是我想要的,但是整个 webview 向上移动了一点,挡住了它上面的所有标签。我做错了什么以及如何解决它?谢谢!