我有一个使用的应用程序UIWebViews
在几个视图控制器中。这UIWebViews
用于渲染本地生成的html,不需要慢速网络访问。
为了节省内存,我只根据视图控制器的提示按需加载这些viewWillAppear
打回来。 (并卸载屏幕外实例以响应didReceiveMemoryWarning
消息。)
问题是用户看到正在渲染的 html,有时还伴随着样式的闪烁和其他各种令人不快的伪像。我更希望渲染在屏幕外完成,并在准备好时显示完全渲染的视图。
如果能够拥有的话,那就非常整洁了viewWillAppear
在 UIWebView 完全渲染之前不会返回。但如何呢?
我告诉UIWebView
通过发送它来渲染什么loadHTMLString:baseURL:
信息。这是异步的,一段时间(很快)之后,webview 的委托会被回调webViewDidFinishLoad
.
我尝试在里面运行一个运行循环viewWillAppear
,运行NSDefaultRunLoopMode
or UITrackingRunLoopMode
。这在模拟器中有效(它向日志抱怨
[CATransaction Synchronize] 在事务内调用
但确实有效)但在设备上它会死锁,webViewDidFinishLoad
从来没有被叫过。
(另外,似乎UIWebView
加载属性不起作用。至少,在我打电话之后loadHTMLString:baseURL:
在获得回调之前,这不是真的。)
我认为这里有很多解决方案。一种快速方法是加载 UIWebView,并将其隐藏属性设置为 YES。然后将您的 UIViewController 设置为 UIWebViews 委托并实现:
- (void)webViewDidFinishLoad:(UIWebView *)webView
您将属性设置回 NO 的位置。
需要注意的是,如果您有框架/嵌入内容,则 webViewDidFinishLoad 将多次触发。所以你必须跟踪这一点。如果您加载本地内容,那应该不是问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)