【发布时间】:2015-05-04 16:06:28
【问题描述】:
我目前正在开发一个使用UIWebView 来显示一些内容的应用程序。它曾经与UIWebView 一起工作得很好,但是当我们将操作系统要求提高到8.1 时,我们决定切换到WKWebView。我们注意到性能有了巨大的提高,但是一些过去可以正常工作的简单想法现在开始失败。经过一些研究,我设法了解发生了什么 - 但我不知道如何解决它。我想知道是否有人可以帮我解决这个问题...
我们的 webview 加载的 URL 需要花费大量时间来完成这项工作,因此在开始请求之前,我们会加载一个静态微调器,这样用户就不会觉得应用程序已经疯了。该静态内容的加载周期已经调整好,因此在正确加载静态内容之前,我们不会启动 URL 请求。只要用户不旋转设备,它就可以正常工作。这是可以看到的:
(出于隐私目的,我不得不更改视图。毕竟我不是此代码的所有者 :-))
我正在使用这个 html 代码来测试大小。 body的背景颜色为深灰色,丑陋的浅灰色框扩大到100%的宽度,减去边距。到现在为止还挺好。但是如果用户旋转设备,就会发生这种情况:
这令人毛骨悚然,因为显然身体的拉伸以匹配最大宽度,但内部 div 处理的相对大小错误。只要请求正在处理,这种情况就会继续。当我强制超时使请求失败时,WKWebView 重新呈现并显示其正确外观:
一旦我发现这一点,我就尝试订阅旋转观察器并通过以下方式强制在 web 视图上重新渲染,但没有成功:
- 为
UIWebView和UIScrollView内部调用viewNeedsDisplay - 重新调整
UIWebView的大小 - 重新定位
UIScrollView内容
所以,到目前为止我的结论:
-
UIWebView上没有发生这种情况,只是在新的WKWebView上发生(我再次测试过,确认) - 看起来
WKWebView在处于加载状态时无法正确呈现视图
有人知道是否有办法解决这个问题吗?像我缺少的一个魔法属性,默认情况下是禁用的?我不想认为他们在重新制作 webview 时破坏了这部分...在此先感谢 :)
编辑:自创建帖子以来我尝试过的东西,但没有成功:
- 通过使用 javascript/本机旋转回调异步更改 DOM 不起作用。在 http 请求结束之前,不会呈现更改。
- 使用
dispatch_async方法在不同的线程中调用http 请求不起作用。在后台,WKWebview可能最终使用相同的线程,就像您从主线程调用它一样。
【问题讨论】:
-
尝试在方向更改时手动刷新页面?我不知道你会使用的确切代码
-
我做不到。毕竟,如果您没有错过解释中的要点,那么当您期待来自另一个请求的答案时,就会发生此问题,因此,如果我刷新将启动新请求的页面,丢弃旧请求......并且阻止应用程序 ;)
-
你有没有想过这个问题?我想我在 WKWebview 中运行视频时遇到了类似的问题。
-
不 :( 仍然没有运气
标签: ios objective-c webkit wkwebview