我正试图显示一个包含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。
更新:需要检查的其他事项:
- 您是否正在主线程上运行有问题的代码
- 线程的运行循环有时间吗
- 你试过设置一个非零的基本URL吗
- 如果web视图的委托具有
-webView:shouldStartLoadWithRequest:
方法,它是否返回YES - 如果使用包含所需HTML和硬编码URL的常量字符串,而不是使用
+stringWithFormat:
构建字符串,会发生什么情况 - 测试设备是否已连接到网络?(有时候,这是最简单的事情。)
- 如果你使用不同的图像,它能正常工作吗?我注意到您使用的URL是用于动画.gif文件的,请尝试非动画.gif或.jpg图像
更新2:问题在于创建web视图。看看你展示的代码中的第一行:
self.GIFWebView = [[UIWebView alloc] init];
对于一个典型的对象来说,看起来是可以的,但-init
不是视图的指定初始值设定项。您应该使用-initWithFrame:
。当我更改您项目中的代码以使用正确的初始值设定项时,图像在您的示例项目中加载良好:
UIWebView *GIFWebView = [[UIWebView alloc] initWithFrame:self.view.bounds];