165 votes

Utilisation de HTML et d'images locales dans UIWebView

J'ai un UIWebView dans mon application que je veux utiliser pour afficher une image qui sera liée à une autre URL.

j'utilise

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

Le problème est que l'image ne se charge pas (c.-à-d. Qu'elle ne peut pas être trouvée) même si elle est ajoutée en tant que ressource dans mon projet et copiée dans le lot.

J'ai essayé d'utiliser NSBundle pour obtenir le chemin complet de l'image et de l'utiliser, et cela n'apparaît toujours pas dans la vue Web.

Des idées?

293voto

Adam Alexander Points 10883

L'utilisation de chemins ou de fichiers relatifs: les chemins d'accès aux images ne fonctionnent pas avec UIWebView. Au lieu de cela, vous devez charger le code HTML dans la vue avec la baseURL correcte:

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

Vous pouvez ensuite vous référer à vos images comme ceci:

 <img src="myimage.png">
 

(de uiwebview revisité )

46voto

Lithu T.V Points 10117

Utilisez ceci:

 [webView loadHTMLString:htmlString baseURL:[[NSBundle mainBundle] bundleURL]];
 

24voto

Anton Points 2036

Je viens de rencontrer ce problème aussi. Dans mon cas, je traitais avec des images qui n'étaient pas localisées et d'autres qui étaient - dans plusieurs langues. Une URL de base ne contenait pas les images dans des dossiers localisés pour moi. J'ai résolu ce problème en procédant comme suit:

 // 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];
 

Ensuite, utilisez imgHTMLTag dans votre code HTML UIWebView lorsque vous chargez le contenu.

J'espère que cela aide toute personne qui a rencontré le même problème.

6voto

Sebastian Keller Points 521

J'ai eu un problème similaire, mais toutes les suggestions n'ont pas aidé.

Cependant, le problème était le * .png lui-même. Il n'y avait pas de canal alpha . D'une manière ou d'une autre, Xcode ignore tous les fichiers png sans canal alpha pendant le processus de déploiement.

2voto

Après avoir lu quelques chapitres dans iOS 6 Programming Cookbok et commencé à apprendre la programmation objective-c et iOS, je voudrais simplement ajouter que si l'on veut charger des ressources à partir d'un bundle personnalisé et l'utiliser dans une vue Web , cela peut être accompli comme ceci:

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

Ensuite, dans votre code HTML, vous pouvez faire référence à une ressource en utilisant le paquet "personnalisé" comme chemin de base:

 body {
    background-image:url('img/myBg.png');
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X