【问题标题】:Loading hidden/offscreen UIWebView加载隐藏/离屏 UIWebView
【发布时间】:2014-03-18 06:21:54
【问题描述】:

实际上我在这里有两个相关的问题,关于在UIWebView 中加载请求的不同用例。

  1. 在插入视图层次结构且其隐藏属性或其父视图之一设置为 YES 的 Web 视图上调用 - [UIWebView loadRequest:] 是否安全?
  2. 在未插入视图层次结构的 Web 视图上调用 - [UIWebView loadRequest:] 是否安全?

我特别感兴趣的是,在不可见的UIWebView 中加载请求是否被认为是一种好习惯,以及一旦请求成功,分配给UIWebView 实例的委托是否会收到通知/失败。我问的原因是UIWebView 类引用说“创建一个UIWebView 对象,将它附加到一个窗口,并向它发送一个加载网络内容的请求”,其中告诉UIWebView 的部分应该是附在窗户上让我怀疑上述方法是否可靠。

【问题讨论】:

    标签: ios cocoa-touch uiwebview loading off-screen


    【解决方案1】:

    我已经成功地将 [UIWebView loadRequest:] 与不在视图层次结构中的对象一起使用。我希望类引用只是假设视图将被显示,因为它可能是最常见的用例。

    【讨论】:

    • 任何视图都应该在某个时候显示,问题是开发人员应该在 UIWebView 实例中加载请求然后显示它还是先显示然后加载。
    • 如果 UIWebView 不在视图层次结构中,调用加载请求是安全的,并且将照常调用委托方法。您可以在调用 webViewDidFinishLoad 时将 UIWebView 添加到视图层次结构中。至于这是否是一种好的做法,那么这取决于您试图通过 UI 实现的目标,但我认为您没有任何理由认为这会导致问题。
    【解决方案2】:
    1. 是的,在视图层次结构中插入的 web 视图上调用 [UIWebView loadRequest:] 是安全的。因为您将在视图中使用 web。此外,如果您只是在程序中提供 URL,它是够得到。

      [UIWebView loadRequest]的以下代码是

      NSString *strurl =@"http:www.google.com";
      NSURL *url=[NSURL urlWithString:strurl];
      NSURLRequest *urlrequest =[NSURLRequest requestWithUrl:url];
      [webView loadRequest:urlrequest];
      
    2. 即使在未插入视图层次结构的 Web 视图上调用 [UIWebView loadRequest:] 也是安全的。因为您可以通过程序动态创建视图并编写 Web 视图的代码。

    【讨论】:

    • 你在这两种情况下都很难过“它是安全的”,而没有参考任何文档或以某种方式争论它。我知道它在实践中有效,但我更关心这些方法的可靠性。任何未记录的行为都可能在某个时候发生变化,无需 Apple 发出任何通知。如果您能为您的回答提供任何证据,那就太好了。
    • 你要什么证明?
    • 对文档的引用,推理为什么它是安全的,来自 Apple 工程师的 cmets,任何东西。
    • 你好,开发者,无论如何,如果你做上述事情,它不会有任何问题。
    【解决方案3】:

    它有效。只要您不使用任何私有 API 并遵循 HIG,该方法是完全可靠的。只要符合您的要求,这不是一个坏习惯。如果UIWebView 有一个hidden 属性可供您使用,那么您当然可以根据您的要求隐藏webView。

    关于您的以下查询,它根据句子上下文写在文档中。

    我问的原因是 UIWebView 类引用说“创建一个 UIWebView 对象,将其附加到窗口,并向其发送加载请求 网页内容”,其中部分告诉 UIWebView 应该是 附在窗户上让我怀疑上述方法是否适用 可靠。

    完整的上下文如下,这显然意味着要在您的应用程序中使用 UIWebView 显示网页,您必须按照上述方式进行。

    您使用 UIWebView 类将 Web 内容嵌入到您的应用程序中。 为此,您只需创建一个 UIWebView 对象,将其附加到窗口, 并向其发送加载网页内容的请求。

    【讨论】:

    • 需要在视图层次结构中插入可见的 Web 视图这一事实太明显了,所以我只想加倍说它确实不需要窗口来加载内容。到目前为止,它可以工作,但可能会在任何时候停止,无需 Apple 发出任何通知,因为这些细节没有记录在案。但我同意解决方案 #1 似乎相当可靠。
    • 正如您所说,您自己 #2 有效,所以我想告诉您,如果它比 #1 更适合您的要求,您可以使用 #2。如果 Apple 将来要停止 #2,那么我认为他们肯定会像他们一样通知我们已弃用的行为。此外,如果他们在没有通知的情况下执行此操作,您始终可以在可用的 beta XCode 中进行测试。然后,如果您发现它停止了,请提出错误以得到澄清并使用 #1 修复您的应用程序。
    • 很好的建议,但需要监控所有测试版本并在应用停止工作时重新构建应用。谢谢!
    • 我有一个实用程序类,它保留 UIWebView 的一个实例,因为我想用它来将 HTML 内容呈现到图像然后缓存它。在进行后续 loadHTMLString: 调用时,我遇到了明确的问题。内容不完整。
    猜你喜欢
    • 1970-01-01
    • 2015-06-27
    • 2015-08-11
    • 2023-03-31
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多