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

Dou*_*ith 2 objective-c uiwebview ios 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];
Run Code Online (Sandbox Code Playgroud)

哪个post只是具有某些属性的对象,例如GIF的URL.

然后在webViewDidFinishLoad:我展示网页视图:

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

NSLog然而,每次我得到"0"和"约:空白" .

为什么不正确加载GIF?

Cal*_*leb 6

然而,每次我得到NSLog的"0"和"约:空白".

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

更新2:问题在于您创建Web视图.查看您显示的代码中的第一行:

self.GIFWebView = [[UIWebView alloc] init];
Run Code Online (Sandbox Code Playgroud)

看起来好一个典型的对象,但-init不是一个视图中的指定初始化.你应该使用-initWithFrame:.当我更改项目中的代码以使用正确的初始化程序时,图像在示例项目中正常加载:

UIWebView *GIFWebView = [[UIWebView alloc] initWithFrame:self.view.bounds];
Run Code Online (Sandbox Code Playgroud)