【问题标题】:How can I prevent delayed display of my UIWebView如何防止我的 UIWebView 延迟显示
【发布时间】:2011-02-27 17:43:44
【问题描述】:

我必须在表格前包含一些“富文本”说明*;并认为将 UIWebView 添加到 tableview 的标题中会起作用。 HTML 是我的资源文件夹中的一个小文件,CSS 在文件中的样式标记中;所以一切都很好,而且是自给自足的。

问题是,视图转换;然后在一小段延迟后出现 webview 的内容。效果很刺耳,我不认为隐藏视图并在它准备好时将其淡入是更可取的。

我正在使用下面的代码在我的viewDidLoad 方法中创建视图。

UIWebView * wv = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, HEADER_HEIGHT)];
[wv setBackgroundColor:[UIColor clearColor]];
[wv setOpaque:NO];
NSString *path = [[NSBundle mainBundle] pathForResource:@"HeaderMsg" ofType:@"html"];
assert(path != nil);
NSData *htmlData = [NSData dataWithContentsOfFile:path];
[wv loadData:htmlData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:nil];
[self.tableView setTableHeaderView:wv];
[wv release];

我发现了 2 个丑陋的解决方法,但我希望有人有更好的解决方案;因为我的解决方法把代码弄得一团糟:

  1. UIMYSCREENViewController,调用一个 [vc preloadWebViewWithDelegate:self]; 将制作webview的方法 使用调用者作为代表。 然后调用者保留 vc 和 等待 webview 发送给它 webviewDidFinishLoad 方法,在 什么时候可以呈现视图 并释放vc。

  2. 调用view可以做webview, 等待它完成,然后创建 新视图并将 webview 传递给它。

无论如何,这两个“解决方案”都让我有点作呕,所以我希望其他人找到更好的方法。

(*这些说明大多是带有一些要点的简单样式文本(没有图像或过于激进的样式);但是在没有 web 视图的情况下需要大约 14 个仔细对齐的 UILabel 视图来模拟这一点 - 并且受制于客户想要更改消息。)

【问题讨论】:

    标签: iphone ios uiwebview


    【解决方案1】:

    我会创建另一个独立的模型或控制器对象来创建和保留 webview,希望在更高级别和之前(可能在应用程序初始化期间)显示带有可以调出 webview 的 UI 的视图。

    将此视为动作游戏的预登台资源,这样它们就不必在游戏循环期间加载,这是一种常见的设计模式。

    【讨论】:

    • 这是我的选项 #2,以及代码当前的作用。将预加载延迟从“动作”中移到应用程序启动中是一个不错的选择。不幸的是,当我显示这个视图时;这是用户将看到的第一个 - 所以我不需要将 webview 预加载移离使用它的视图更远。我仍然希望有人会推荐一个更清洁的解决方案,但我已经倾注了文档并怀疑没有。
    • 我考虑过在初始化后使用 performSelector:withObject:afterDelay 来显示视图约 700 毫秒。至少那时我没有散布在各处的视图代码。如果明天没人有更好的解决方案;我会接受你的回答。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多