在尝试使用GIF创建UIWebView之后,当调用webViewDidFinishLoad时,URL始终只是:空白。为什么?

时间:2013-12-19 19:56:45

标签: ios objective-c uiwebview uiwebviewdelegate

我正在尝试在其中显示带有GIF的UIWebView,但只有在GIF加载后才会显示。

我按如下方式加载GIF:

    self.GIFWebView = [[UIWebView alloc] init];
    self.GIFWebView.delegate = self;

    NSString *html = [NSString stringWithFormat:@"<html><head></head><body><img src=\"%@\"></body></html>", post.url];
    [self.GIFWebView loadHTMLString:html baseURL:nil];

其中post只是一个具有某些属性的对象,例如GIF的URL。

然后在webViewDidFinishLoad:中显示网络视图:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"%f", webView.scrollView.frame.size.width);
    NSLog(@"%@", [webView.request.URL absoluteString]);
}

然而,每次NSLog得到“0”和“约:空白”。

为什么不正确加载GIF?

1 个答案:

答案 0 :(得分:6)

  

然而,每次NSLog都会得到“0”和“about:blank”。

不足为奇。您告诉Web视图加载您在字符串中提供的HTML而不是为其提供请求。您要记录的URL是请求URL,由于没有请求,因此没有请求URL。

  

为什么不正确加载GIF?

可能是因为您滥用了URL对象。看一下代码:

  

NSString *html = [NSString stringWithFormat:@"<html><head></head><body><img src=\"%@\"></body></html>", post.url];

我们无法确定post.url的类型,但可能是NSURL*。您可能正在将NSURL传递给格式字符串,这可能无法产生您正在寻找的结果。尝试传入像[post.url absoluteString]这样的字符串而不是实际的NSURL对象。

此外,您可能希望在创建后立即记录html的值,以便检查您发送到Web视图的完整HTML。

更新:要检查的其他一些事项:

  1. 您是否正在主线程上运行相关代码?
  2. 线程的运行循环是否有时间?
  3. 您是否尝试过设置非零基础网址?
  4. 如果网络视图的委托具有-webView:shouldStartLoadWithRequest:方法,是否返回YES?
  5. 如果您使用包含所需HTML的常量字符串和硬编码网址而不是使用+stringWithFormat:构建字符串,会发生什么?
  6. 测试设备是否连接到网络? (有时这是最简单的事情。)
  7. 如果您使用其他图片,它是否正常工作?我注意到您使用的URL是动画.gif文件,请尝试使用非动画.gif或.jpg图像。
  8. 更新2:问题在于您创建了网络视图。查看您显示的代码中的第一行:

    self.GIFWebView = [[UIWebView alloc] init];
    

    对于典型对象,看起来没问题,但-init不是视图的指定初始值设定项。您应该使用-initWithFrame:代替。当我更改项目中的代码以使用正确的初始化程序时,图像在示例项目中正常加载:

    UIWebView *GIFWebView = [[UIWebView alloc] initWithFrame:self.view.bounds];