Использование HTML и локальных изображений в UIWebView - PullRequest
159 голосов
/ 14 апреля 2009

В моем приложении есть UIWebView, который я хочу использовать для отображения изображения, которое будет ссылаться на другой URL.

Я использую

<img src="image.jpg" /> to load the image.

Проблема в том, что изображение не загружается (т.е. оно не может быть найдено), даже если оно добавлено в качестве ресурса в мой проект и скопировано в пакет.

Я пытался использовать NSBundle для получения полного пути к изображению и использовал его, но он все еще не отображается в веб-представлении.

Есть идеи?

Ответы [ 13 ]

288 голосов
/ 14 апреля 2009

Использование относительных путей или файла: пути для ссылки на изображения не работают с UIWebView. Вместо этого вы должны загрузить HTML в представление с правильным baseURL:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
[webView loadHTMLString:htmlString baseURL:baseURL];

Затем вы можете ссылаться на ваши изображения следующим образом:

<img src="myimage.png">

(из uiwebview повторно )

46 голосов
/ 18 июня 2012

Используйте это:

[webView loadHTMLString:htmlString baseURL:[[NSBundle mainBundle] bundleURL]];
24 голосов
/ 05 декабря 2012

Я тоже столкнулся с этой проблемой. В моем случае я имел дело с некоторыми изображениями, которые не были локализованы, а с другими - на нескольких языках. Базовый URL не получил изображения внутри локализованных папок для меня. Я решил это, выполнив следующее:

// make sure you have the image name and extension (for demo purposes, I'm using "myImage" and "png" for the file "myImage.png", which may or may not be localized)
NSString *imageFileName = @"myImage";
NSString *imageFileExtension = @"png";

// load the path of the image in the main bundle (this gets the full local path to the image you need, including if it is localized and if you have a @2x version)
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageFileName ofType:imageFileExtension];

// generate the html tag for the image (don't forget to use file:// for local paths)
NSString *imgHTMLTag = [NSString stringWithFormat:@"<img src=\"file://%@\" />", imagePath];

Затем при загрузке содержимого используйте imgHTMLTag в HTML-коде UIWebView.

Надеюсь, это поможет любому, кто столкнулся с той же проблемой.

6 голосов
/ 13 июня 2012

У меня была схожая проблема, но все предложения не помогли.

Однако проблема заключалась в самом * .png. У него не было альфа-канала . Каким-то образом Xcode игнорирует все файлы png без альфа-канала во время процесса развертывания.

5 голосов
/ 04 ноября 2016

попробуйте использовать строку изображения base64.

NSData* data = UIImageJPEGRepresentation(image, 1.0f);

NSString *strEncoded = [data base64Encoding];   

<img src='data:image/png;base64,%@ '/>,strEncoded
3 голосов
/ 30 мая 2017

В Swift 3:

webView.loadHTMLString("<img src=\"myImg.jpg\">", baseURL: Bundle.main.bundleURL)

Это работало для меня, даже когда изображение находилось внутри папки без каких-либо изменений.

3 голосов
/ 30 декабря 2014

Вы можете добавить папку (скажем, WEB с подпапками css, img и js и файлом test.html) в ваш проект, выбрав Добавить файлы в «MyProj» и выбрав Создание ссылок на папки . Теперь следующий код позаботится обо всех упомянутых изображениях, css и javascript

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"WEB/test.html" ofType:nil];
[webView  loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
2 голосов
/ 02 февраля 2013

После прочтения нескольких глав в Cookbok для программирования на iOS 6 и начала изучения target-c и программирования на iOS, я просто хотел бы добавить, что если вы собираетесь загружать ресурсы из custom связать и использовать это в веб-представлении, это может быть достигнуто следующим образом:

NSString *resourcesBundlePath = [[NSBundle mainBundle] pathForResource:@"Resources" ofType:@"bundle"];
NSBundle *resourcesBundle = [NSBundle bundleWithPath:resourcesBundlePath];
[self.outletWebView loadHTMLString:[html description] baseURL:[resourcesBundle bundleURL]];

Затем в своем html вы можете ссылаться на ресурс, используя «пользовательский» комплект в качестве базового пути:

body {
    background-image:url('img/myBg.png');
}
1 голос
/ 29 января 2017

Свифт версия Адама Александерса Цель C ответ:

let logoImageURL = NSURL(fileURLWithPath: "\(Bundle.main.bundlePath)/PDF_HeaderImage.png")
0 голосов
/ 28 ноября 2016

Swift Версия ответа Lithu T.V:

webView.loadHTMLString(htmlString, baseURL: NSBundle.mainBundle().bundleURL)
...