2013-08-16 5 views
1

Je suis en train de charger un UIWebView d'une chaîne comme suit:chargement lent UIWebView de chaîne

NSString* plainContent = @"..."; 
    NSString* htmlContentString = [[NSString stringWithFormat: 
            @"<html>" 
            "<style type=\"text/css\">" 
            "body { background-color:transparent; font-family:Arial-BoldMT; font-size:18;}" 
            "</style>" 
            "<body>" 
            "<p>%@</p>" 
            "</body></html>", plainContent] retain]; 
    [webView loadHTMLString:htmlContentString baseURL:nil]; 

Lorsque le contenu simple a un certain HTML simple avec environ 5 liens et 400 caractères. J'essaye d'exécuter ceci sur mon iPhone5, et la première fois qu'il le charge prend toujours quelques secondes. Est-ce que quelqu'un sait pourquoi cela se passe et comment résoudre ce problème?

Répondre

3

Cela se produit généralement en raison de CSS utilisé dans le rendu de page Web. C'est le comportement par défaut lors du chargement de la page en local. Nous pouvons également considérer que dans le premier chargement, UIWebview n'a pas de cache à ceci et crée le cache pour cette page.

Pour le rendre peu rapide, essayez de charger une page à partir d'un fichier, par exemple.

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"filePath" ofType:@"html" inDirectory:@"."]]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:request]; 

CSS comme body { background-color:transparent; font-family:Arial-BoldMT; font-size:18;} augmentent également le temps de chargement d'une page.

0

Pour les autres utilisateurs ayant rencontré ce problème, nous avons parfois créé un fichier HTML en copiant-collant à partir de sites Web existants et nous oublions de vérifier les liens sur l'en-tête.

Dans mon cas, j'ai oublié de supprimer le lien utilisé rel dans ma tête de chaîne HTML:

NSString* html = [NSString stringWithFormat:@"<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title>%@</title><link type=\"text/css\" rel=\"stylesheet\" href=\"http://192.168.3.183/assets/css/question.css?1383042738\" /></head><body><h1 style=\"font-size: 2em; margin-bottom: 0; color: #3357b8; font-weight: bold\">%@</h1><div style=\"color: #555\">%@</div><br><p style=\"line-height: 1.7em\">%@</p><a href=\"%@\"><b>Open in browser</b></a><br></body></html>", title, title, dateString, content, detail]; 

L'URL locale pointée par rel lien ci-dessus prendre le temps de chargement encore pire.

<link type=\"text/css\" rel=\"stylesheet\" href=\"http://192.168.3.183/assets/css/question.css?1383042738\" /> 

Il suffit de ne pas oublier de revérifier votre en-tête ou un autre lien dans votre chaîne HTML et l'enlever si elle ne sert pas.

4

J'ai récemment eu des difficultés avec les performances de UIWebView. Il m'a fallu beaucoup de temps pour traiter le HTML local que je fournissais (1 ou 2 secondes sur le simulateur iPad Air 2) même si c'était ridiculement petit. Après beaucoup de googler autour, j'ai trouvé que le coupable était la détection des numéros de téléphone sur webview. Une fois que je l'ai décochée sur le storyboard, la latence avait disparu.

Espérons qu'il aide quelqu'un face au même problème :)

+0

Vous avez raison Bro ... Merci qui a fonctionné pour moi ... :-) – Alwin