【问题标题】:Images not loading FIRST time a UIWebView is used首次使用 UIWebView 时未加载图像
【发布时间】:2013-11-01 02:56:06
【问题描述】:

我最初的计划是使用拆分视图控制器来为 iPad 应用程序提供一个表格视图和一个通用视图。然后我意识到我不能使用拆分视图控制器作为子控制器。所以,我一直在尝试使用表格视图控制器,到目前为止我已经得到了很好的结果。本质上,我使用 tableview 的标题视图作为我将根据选择的行使用的各种视图的容器。唯一未解决的问题是网站的图像在第一次呈现时不会显示在 UIWebView 中。如果我点击另一个显示 Web 视图的表格行,它会显示得很好。如果我再次点击原始的,它也显示正常。

我先点击哪个并不重要。它总是第一个不显示图像的。它不显示图像,而是显示图像文件的名称。

当我用拆分视图控制器尝试类似的事情时,我没有遇到这个问题。

任何想法我应该寻找什么?或者有什么我必须做而我不能做的事情?

如果重要的话,正在加载的页面只是远程服务器上的缩略图页面,由 Irfanview 的 HTML 缩略图页面生成器创建。

附:经过进一步的测试,它确实是第一个演示文稿,只是没有按预期工作。首先,我的意思是每个应用程序会话的第一个。 UIWebview 显示为表头的子视图。 tableview 控制器显示为来自另一个控制器的按钮的弹出窗口,当用户点击图像时显示该按钮。即使我关闭所有这些控制器层等,如果我再次实例化它们,UIWebView 也会正确显示。

这表明可能在开始之前加载一个虚拟的UIWebView,但这看起来很笨拙。

webViewDidStartLoad: 正好接到一个电话,webViewDidFinishLoad: 正好接到一个电话,webView:didFailLoadWithError: 没有接到任何电话。

知识: 杂牌起作用了。这里是:

在我的表视图控制器中,我创建了一个布尔属性 URLHasBeenRequested 并在 viewDidLoad 中将其设置为 NO。然后我要求重新加载:

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
   if (!self.URLHasBeenRequested) {
      //On first pass, try a second request.
      [webView loadRequest:webView.request];
      self.URLHasBeenRequested = YES;//Set this flag so a duplicate request happens only the first time.
   }
}

【问题讨论】:

    标签: ios objective-c uitableview uiwebview


    【解决方案1】:

    我怀疑这与 UITableView 加载标头并尝试在该过程中分配内存的方式有关,而不是与 UIWebView 本身有关。无论出于何种原因,UIWebView 的加载似乎被中断,而 UITableView 的渲染仍在完成(只是猜测)。

    您可能会尝试的一件事是继续通过添加 UIWebView 子视图来设置表头,但不要立即调用“loadRequest”。例如,您可以等到表格的其余可见单元格加载完毕,然后最后加载标题视图。您可以像这样检测何时发生:

    -(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if([indexPath row] == ((NSIndexPath*)[[tableView indexPathsForVisibleRows] lastObject]).row){ [webView loadRequest:webView.request]; } }

    诚然,这也是一个有点笨拙的解决方法,但至少你没有让 UIWebView 两次加载内容。我自己也没有对此进行过测试,并且没有看到您的实际表加载代码,很难说问题的根源是否在其他地方,但让我知道这是否有效!

    【讨论】:

    • 你可能有一些东西。例如,我知道它使用私人UIGobblerGestureRecognizer,显然是为了吸引手势。因此,如果发生其他类似的事情影响我的 webview,我不会感到惊讶。不管怎样,有时间我会试试你的建议。
    • 哦,等一下。我只是想到了一些事情。这是行不通的,除非我遗漏了一些关于表格视图的东西。触发 web 视图的事情是点击表格视图单元格之一,因此表格已经加载。它不会仅仅因为有人点击了一个单元格而重新加载,是吗?我认为您必须明确要求重新加载。我可能真正应该做的是使用容器控制器而不是尝试使用表头,但由于它通常可以工作,我想我现在就让它保持原样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多