在 UIScrollView 内滚动时,调整大小的 UIWebView 返回到原始大小

Posted

技术标签:

【中文标题】在 UIScrollView 内滚动时,调整大小的 UIWebView 返回到原始大小【英文标题】:Resized UIWebView returns to original size when scrolling inside a UIScrollView 【发布时间】:2014-02-06 18:16:08 【问题描述】:

我有一个 UIScrollView,上面有某些细节、标签等,还有一个 UIWebView,底部有 html 内容。 (我知道我不应该将 UIWebView 放在 UIScrollView 中,但我需要所有内容都是可滚动的,而不仅仅是 webview)。

我的步骤是:

1)我设置UIWebView scrollEnabled=NO,并计算UIWebView内容大小并更新它的框架:(webViewDidFinishLoad:(UIWebView *)webView

CGRect WebViewFrame = webView.frame;
WebViewFrame.size.height = 1;
webView.frame = WebViewFrame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
WebViewFrame.size = fittingSize;
webView.frame = WebViewFrame;

2) 我计算了所有 UIScrollView 的内容并将其更新为contentSize

CGFloat contentHeight = 0;
contentHeight += mainInfoView.frame.size.height;
contentHeight += .......
contentHeight += webView.frame.size.height;
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, contentHeight)];

起初这似乎工作得很好,UIWebView 被调整为正确的大小,并且 UIScrollView 的 contentSize 似乎按预期扩展。

问题是当我滚动或移动滚动视图时,UIWebView 会立即恢复到原来的大小,我认为 UIScrollView contentSize 也会发生变化。 我也不知道为什么。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

您很可能正在使用autolayout

禁用自动布局属性。

发生的原因:自动布局将使用当前约束将视图更新到其原始位置。

【讨论】:

哇,你完全正确!我不知道 Autolayout 会像这样更新视图位置。非常感谢您的信息和帮助! :) 对您有帮助吗?接受和支持答案会很酷。 完美运行!我是新用户,我还没有足够的声望来投票,对不起。我会尽快做的! 谁能告诉我如何禁用自动布局 禁用autolayout 设置yourOutlet.translatesAutoresizingMaskIntoConstraints = false

以上是关于在 UIScrollView 内滚动时,调整大小的 UIWebView 返回到原始大小的主要内容,如果未能解决你的问题,请参考以下文章

调整滚动视图框架的大小时,UIScrollView 子视图的大小调整不正确

如何检测 UIScrollView 何时变为可滚动?

UICollectionView 在 UIScrollView 内调整大小

快速滚动 UIScrollView 时 UIImageView 停止调整大小

在 UIScrollView 中调整视图大小后,滚动视图不知道它改变了

UIScrollView 内容大小在不应该时裁剪子视图