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