我有一个使用UIWebViews在几个视图控制器的应用程序。的UIWebViews用于呈现本地生成的HTML,不需要慢的网络访问。

要保存存储器I仅由的ViewController viewWillAppear回调的提示在需要加载这些。 (和卸载屏幕外响应于didReceiveMemoryWarning消息实例。)

的问题是,用户得到看到的HTML被呈现,有时伴有造型和其他各种不愉快的伪影闪烁。我宁愿渲染来完成屏幕外,并揭示了完全渲染视图时,它的准备。

这将是非常整洁,能够有viewWillAppear才会返回UIWebView中完全呈现。但如何?

我告诉UIWebView通过发送一个loadHTMLString:baseURL:消息渲染什么。这是异步的,并且在一段时间(快)以后的WebView委托被称为回webViewDidFinishLoad

我尝试与运行内部viewWillAppear一个runloop,运行的是NSDefaultRunLoopModeUITrackingRunLoopMode。这个作品在模拟器(它抱怨到日志

  

[CATransaction同步]称为事务内

但不工作),但在设备上它死锁,与webViewDidFinishLoad从未被调用。

(此外,它似乎像UIWebView装载属性不起作用。至少,在我打电话loadHTMLString:baseURL:并得到它是不正确的回调之前。)

没有正确的解决方案

其他提示

解决方案的很多在这里,我想。一个快速的一个是与它的隐藏属性设置为YES来加载的UIWebView。然后设置你的UIViewController为UIWebViews中的代表和执行:

- (void)webViewDidFinishLoad:(UIWebView *)webView

在其中设置的属性回到NO。

在这里要注意的是,webViewDidFinishLoad将火不止一次如果你已经成帧/嵌入式内容。所以,你必须跟踪这个。真的不应该是一个问题,如果要加载本地内容。

我喜欢monowerker的溶液最好的,但另一种解决办法是将抓住的已呈现的UIWebView所有的时间(在除视图控制器一些更持久的对象)。我只有这样做,如果monowerker的解决方案的样子太具有破坏性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top