gpt4 book ai didi

ios - UIWebView 未完全加载,高度变化

转载 作者:可可西里 更新时间:2023-11-01 03:39:19 25 4
gpt4 key购买 nike

我有一个包含一些标签的 View Controller 和一个正在其中加载一些 html 的 UIWebView。所有这些标签和 UIWebView 都是 UIScrollView 的 subview 。我已禁用 UIWebView 的滚动,因此标签和 UIWebView 在 UIScrollView 内一起滚动。

然后我找到了 UiWebView 中内容的大小,根据内容大小更改了 UIWebView 大小,然后将 ScrollView 的大小设置为 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 内容的大小时,我注意到它为相同的内容提供了不同的高度。例如,如果我第一次打开 View Controller ,它显示的高度等于 915.0,当我在导航中返回并返回到该 View Controller 时,日志将显示大小为 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 向上移动了一点,挡住了它上面的所有标签。我做错了什么以及如何解决?谢谢!

最佳答案

当您尝试在 UIScrollView 中嵌入 UIWebView 和其他 View 时,这是一个非常常见的问题。

解决方案 1:您已经解释了问题中的第一个解决方案。然而,只有当 UIScrollView 中的 UIWebView 中只涉及文本时,此解决方案才有效。如果有图像和 ajax 或任何延迟加载的类似内容,此解决方案将不会在第一时间为您提供正确的高度。

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;

解决方案 2: 另一种解决方案是使用 javascript。它每次都能为您提供正确的高度,但您将面临我无法解决的奇怪问题。在您的情况下,您说整个 View 向上移动了一点。

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;

解决方案 3: 最后一个解决方案对我有用,它一定会解决您的问题。它涉及合并我描述的前两个解决方案中的代码。也就是说,您将使用 javascript 获得高度,因为它每次都会给出正确的高度,然后使用第一个解决方案中的其余代码并增加几个点。注意我添加了 +125.0,这就是我解决它的方法:

CGFloat height = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
CGFloat width = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.width"] floatValue];
CGRect frame = myWebView.frame;
frame.size.height = height + 125.0;
frame.size.width = width;
myWebView.frame = frame;
mainScrollView.contentSize = myWebView.bounds.size;

希望这对您有所帮助!

关于ios - UIWebView 未完全加载,高度变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19507639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com