我目前正在开发一个使用UIWebView
来显示某些内容的应用程序。它曾经与UIWebView
一起正常工作,但是当我们将操作系统要求提高到8.1时,我们决定切换到WKWebView
。我们注意到性能有了很大的提高,但是一些简单的认为过去工作正常,现在开始失败了。经过一些研究,我设法看到了什么 - 但我不知道如何解决它。我想知道是否有人可以帮我一把......
我们的webview加载的URL花了很多时间来完成这项工作,所以在开始请求之前我们加载一个静态微调器,这样用户就不会觉得应用程序已经疯了。该静态内容的加载周期已经调整,因此我们不会启动URL请求,直到静态内容已正确加载。只要用户不旋转设备,这样就可以正常工作。这是可以看到的:
(出于隐私目的,我不得不更改视图。毕竟,我不是此代码的所有者: - )
我正在使用此HTML代码来测试大小。身体的背景颜色为深灰色,丑陋的浅灰色盒子扩展到宽度的100%,减去了边缘。到现在为止还挺好。但是如果用户旋转设备,就会发生这种情况:
这是令人毛骨悚然的,因为显然身体的拉伸与最大宽度相匹配,但内部div正在处理错误的相对大小。只要正在处理请求,这就会继续。当我强制超时以使请求失败时,WKWebView
重新呈现并显示其正确的外观:
一旦我发现了这一点,我尝试了订阅旋转观察器并在webview上强制重新渲染,但没有成功:
viewNeedsDisplay
和UIWebView
内部UIScrollView
UIWebView
UIScrollView
内容所以,到目前为止我的结论是:
UIWebView
上,只是在新的WKWebView
上(我再次对此进行了测试,确认了)WKWebView
在加载状态时无法正确呈现视图有人知道是否有办法解决这个问题?像我失踪的一个神奇属性,默认情况下被禁用?我不想在重新制作网页视图时认为他们打破了这一部分...提前致谢:)
编辑:自创建帖子以来我尝试过的东西没有成功:
dispatch_async
方法在另一个主题中调用http请求不起作用。在引擎盖下,WKWebview
可能最终使用相同的线程,就像从主线程中调用它一样。答案 0 :(得分:2)
如果你不介意有点hacky,有很多方法可以使用Javascript:
您可以添加检测window.orientation
和window.onresize
等更改的Javascript。查看是否有任何与帧相关的事件被调用。如果他们被调用,只需使用Javascript自行调整div。
如果事件永远不会被触发,您可以使用evaluateJavaScript:completionHandler:
您也可以通过这种方式制作自己的活动。只要您在应用中检测到设备方向发生变化,只需发送一个resize div脚本。
如果您要加载Javascript,则可以查看async
标记的defer
和<script>
。这意味着您必须更改Webview中的代码。
这不是解决这个问题的最佳方式,但它需要的改动最少。
我还建议您在https://bugreport.apple.com/填写错误报告,以便您知道它是否是预期的行为。
答案 1 :(得分:0)
虽然在加载内容时我没有WKWebView
无法呈现的解决方案,但我建议您对问题进行不同的修复。
您可以将加载视图从webview中加载的页面更改为本机iOS视图。只需在主视图中添加子视图,在开始加载时在webview上方添加,并在加载完成后将其删除。这可以在旋转时正常工作,因此您可以获得与以前相同的体验。
另一种解决方案是将加载视图加载到UIWebView
之前,就像之前所做的那样,旋转工作正常,而后面的WKWebView
中的普通页面。加载页面时,您只需隐藏或删除UIWebView
。