从 URL 加载内容后,UIWebView 显然滚动了

Posted

技术标签:

【中文标题】从 URL 加载内容后,UIWebView 显然滚动了【英文标题】:UIWebView apparently scrolled after loading content from URL 【发布时间】:2014-05-31 04:18:13 【问题描述】:

我正在使用loadRequest:requestURLhtml 文档加载到UIWebView 中。 HTML 内容并不完全适合视图的框架。令我惊讶的是,在页面加载时(调用webViewDidFinishLoad: 时)视图的scrollView.contentOffset(0,0) 不同。看起来好像内容可能已经大致向下滚动,以使其垂直中心与视图的垂直中心对齐(见下面的屏幕截图)。

这怎么会发生?我如何才能实现让内容的左上角最初与视图的左上角对齐的预期行为?在 webViewDidFinishLoad:` 中将 scrollView.contentOffset 设置为 (0,0) 是一种选择,但显然会导致一些闪烁。

这发生在UIViewController 的上下文中,该UIViewController 在其根视图下方包含两个兄弟UIWebViews。两个UIWebViews 垂直堆叠,中间有一个UILabel(在屏幕截图中显示为灰色背景)。 (下方的UIWebView在截图中不可见,因为它目前全是白色的。)视图使用基于约束的布局,当前的问题与上方的UIWebView有关。

更新 进一步的研究表明,视觉缺陷不是由于滚动上部UIWebView,而是由于其frame.origin.y已从0设置为64(其中也是调用webViewDidFinishLoad 时状态栏和导航栏的组合高度。我从视图控制器的viewWillAppear: 调用loadRequest:requestWithURL: 并且在上部UIWebView 上有一个布局约束,它在顶部布局指南的顶部和底部之间施加了0 的垂直空间。

【问题讨论】:

【参考方案1】:

我认为会发生以下情况:ios 7 希望UIScrollViews 在向下滚动时延伸到状态栏和导航栏下方。显然,它执行初始垂直滚动是为了防止 Web 内容的顶部在发生任何滚动之前隐藏在这些栏后面。

我有一个布局约束,垂直距离为 0 到放置在 UIWebView 上的顶部布局指南,这导致错误的垂直距离是状态栏高度的两倍加上从顶部导航栏的高度屏幕。将此布局约束替换为 1 与父视图的垂直距离为 0 纠正了错误。

【讨论】:

以上是关于从 URL 加载内容后,UIWebView 显然滚动了的主要内容,如果未能解决你的问题,请参考以下文章

从后台获取加载 UIWebView

Swift:(预)从 initialViewController 加载 UIWebView

UIWebView 不从协议相对 URL 加载图像

加载后快速获取 UIWebView 的正确大小

UIWebView 新增 Url 加载动画效果

iOS uiwebview 无法从 javascript 方法加载资源