2013-12-19 1 views
2

Я пытаюсь показать UIWebView с GIF в нем, но только после загрузки GIF.После попытки создания UIWebView с GIF в нем, когда вызывается webViewDidFinishLoad, URL-адрес всегда примерно равен: blank. Зачем?

я загружаю 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 только объект с некоторыми свойствами, такими как URL для GIF.

Тогда в webViewDidFinishLoad: я показываю веб вид:

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

я получаю «0» и «о: пустой» для NSLog сек каждый раз, однако.

Почему он не загружает GIF правильно?

+0

Попробуйте указать базовый URL. Посмотрите, поможет ли это. Кроме того, вы должны напечатать 'webView.scrollView.contentSize.width'. –

ответ

6

Я получаю «0» и «about: blank» для NSLogs каждый раз, однако.

Не удивительно. Вы предлагаете веб-просмотр загружать 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 сразу после его создания, чтобы вы могли проверить полный HTML-код, который вы отправляете на веб-представление.

Update: Некоторые дополнительные вещи, чтобы проверить:

  1. Вы используете код в вопросе о главном потоке?
  2. Происходит ли цикл запуска потока?
  3. Вы пытались установить базовый URL-адрес, отличный от нуля?
  4. Если делегат веб-представления имеет метод -webView:shouldStartLoadWithRequest:, он возвращает ДА?
  5. Что произойдет, если вы используете постоянную строку, которая содержит нужный HTML-код, и жестко закодированный URL вместо того, чтобы строить строку с +stringWithFormat:?
  6. Является ли тестовое устройство подключено к сети? (Иногда это самая простая вещь, которая вас заводит.)
  7. Правильно ли это работает, если вы используете другое изображение?Я заметил, что URL-адрес, который вы используете, предназначен для анимированного файла .gif, попробуйте вместо него анимированный .gif или .jpg.

Обновление 2: Проблема заключается в создании веб-представления. Посмотрите на самой первой строке в коде, который вы показали:

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

Это выглядит хорошо для типичного объекта, но -init не назначенный инициализатор для зрения. Вместо этого вы должны использовать -initWithFrame:. Изображение загружается отлично в вашем примере проекта, когда я меняю код в своем проекте на использование правильного инициализатора:

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

UIWebViews чувствительны к их вводу - если он недействителен, он не будет загружать его, поэтому обязательно проверьте готовую строку HTML. – Emil

+0

'post.url' возвращает NSString, поскольку' post' - это только объект Core Data, а url - один из его атрибутов. И вошедший HTML это, например: '' –

+0

Для обеспечения правильного форматирования я ответил на ваши вопросы здесь: https://gist.github.com/christianselig/a2859a940790197442e9 Спасибо за все помощь. –

 Смежные вопросы

  • Нет связанных вопросов^_^