gpt4 book ai didi

iphone - 推迟 viewWillAppear 直到 webViewDidFinishLoad

转载 作者:行者123 更新时间:2023-12-03 18:36:38 27 4
gpt4 key购买 nike

我有一个在多个 View Controller 中使用 UIWebViews 的应用程序。 UIWebViews 用于渲染本地生成的 html,无需缓慢的网络访问。

为了节省内存,我仅根据 viewcontroller viewWillAppear 回调的提示按需加载这些内容。 (并卸载屏幕外实例以响应 didReceiveMemoryWarning 消息。)

问题在于,用户看到正在渲染的 html,有时还伴随着样式的闪烁和其他各种令人不快的工件。我更希望渲染在屏幕外完成,并在准备好时显示完全渲染的 View 。

如果能够让 viewWillAppear 在 UIWebView 完全呈现之前不返回,那就太简洁了。但如何呢?

我通过向 UIWebView 发送一条 loadHTMLString:baseURL: 消息来告诉它要渲染什么。这是异步的,一段时间(很快)之后,webview 的委托(delegate)会被回调 webViewDidFinishLoad

我尝试在 viewWillAppear 内运行 runloop,运行 NSDefaultRunLoopModeUITrackingRunLoopMode。这在模拟器中有效(它向日志提示

[CATransaction synchronize] called within transaction

但确实有效),但在设备上它会死锁,webViewDidFinishLoad 永远不会被调用。

(此外,似乎 UIWebView 加载属性不起作用。至少,在我调用 loadHTMLString:baseURL: 之后且在获取回调之前,它不是 true .)

最佳答案

我认为这里有很多解决方案。一种快速方法是加载 UIWebView,并将其隐藏属性设置为 YES。然后将您的 UIViewController 设置为 UIWebViews 委托(delegate)并实现:

- (void)webViewDidFinishLoad:(UIWebView *)webView

将属性设置回 NO。

需要注意的是,如果您有框架/嵌入内容,webViewDidFinishLoad 将多次触发。所以你必须跟踪这一点。如果您加载本地内容,那应该不是问题。

关于iphone - 推迟 viewWillAppear 直到 webViewDidFinishLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com