我有一个UIWebViews在多个视图控制器中使用的应用程序。UIWebViews用于渲染本地生成的 html,不需要慢速网络访问。
viewWillAppear为了节省内存,我只根据视图控制器回调的提示按需加载这些。(并卸载屏幕外实例以响应didReceiveMemoryWarning消息。)
问题是用户可以看到正在呈现的 html,有时伴随着样式的闪烁和其他各种令人不快的伪影。我宁愿渲染在屏幕外完成,并在准备好时显示完全渲染的视图。
viewWillAppear在 UIWebView 完全呈现之前能够不返回将是非常整洁的。但是怎么做?
我通过向它发送消息来告诉它UIWebView要呈现的内容。loadHTMLString:baseURL:这是异步的,稍后(很快)webview 的委托会被回调webViewDidFinishLoad。
我尝试在内部运行一个 runloop viewWillAppear,运行NSDefaultRunLoopMode或UITrackingRunLoopMode. 这在模拟器中有效(它向日志抱怨
[CATransaction synchronize] 在事务中调用
但确实有效)但在设备上它会死锁,webViewDidFinishLoad永远不会被调用。
(另外,似乎UIWebView加载属性不起作用。至少,在我调用之后loadHTMLString:baseURL:和在得到回调之前它不是真的。)