在尝试创建一个包含GIF的UIWebView后,当调用webViewDidFinishLoad时,URL总是大约为:空白



我正试图显示一个包含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:中,我显示web视图:

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

然而,每次NSLog都会得到"0"one_answers"about:black"。

为什么它不能正确加载GIF?

不过,每次NSLogs都会得到"0"one_answers"about:black"。

这并不奇怪。您告诉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. 你试过设置一个非零的基本URL吗
  4. 如果web视图的委托具有-webView:shouldStartLoadWithRequest:方法,它是否返回YES
  5. 如果使用包含所需HTML和硬编码URL的常量字符串,而不是使用+stringWithFormat:构建字符串,会发生什么情况
  6. 测试设备是否已连接到网络?(有时候,这是最简单的事情。)
  7. 如果你使用不同的图像,它能正常工作吗?我注意到您使用的URL是用于动画.gif文件的,请尝试非动画.gif或.jpg图像

更新2:问题在于创建web视图。看看你展示的代码中的第一行:

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

对于一个典型的对象来说,看起来是可以的,但-init不是视图的指定初始值设定项。您应该使用-initWithFrame:。当我更改您项目中的代码以使用正确的初始值设定项时,图像在您的示例项目中加载良好:

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

最新更新