Domanda

Ho un'applicazione che utilizza UIWebViews in diversi controller di vista. Il UIWebViews vengono utilizzati per il rendering HTML generato a livello locale, non lento l'accesso alla rete richiesto.

Per risparmiare memoria che carico solo questi su richiesta come richiesto dalla richiamata viewcontroller viewWillAppear. (E scarico fuori schermo casi in risposta a didReceiveMemoryWarning messaggi.)

Il problema è che l'utente ottiene di vedere il codice HTML viene eseguito il rendering, a volte accompagnata da lampi di styling e altri artefatti sgradevoli assortiti. Avrei preferito il rendering essere fatto fuori campo, e rivelano la vista completamente reso quando il suo pronto.

Sarebbe molto ordinata per essere in grado di avere la viewWillAppear non tornare fino a quando si rende pienamente l'UIWebView. Ma come?

dico UIWebView quello di rendere inviando un messaggio loadHTMLString:baseURL:. Questo è asincrona, e un po 'di tempo (presto) entro il delegato del WebView viene richiamato webViewDidFinishLoad.

ho sperimentato con l'esecuzione di un runloop all'interno viewWillAppear, che utilizza i NSDefaultRunLoopMode o UITrackingRunLoopMode. Questo funziona nel simulatore (si lamenta con il registro

  

[CATransaction Sincronizza] chiamato all'interno della transazione

, ma funziona), ma su un dispositivo che deadlock, con webViewDidFinishLoad mai chiamato.

(Inoltre, sembra che il carico UIWebView proprietà non funziona. Almeno, dopo che io chiamo loadHTMLString:baseURL: e prima di ottenere la richiamata non è vero.)

Nessuna soluzione corretta

Altri suggerimenti

Un sacco di soluzioni qui credo. Un rapido è quello di caricare l'UIWebView con la sua proprietà Hidden impostata su YES. Quindi impostare il tuo UIViewController come delegato UIWebViews e implementare:

- (void)webViewDidFinishLoad:(UIWebView *)webView

in cui si imposta la proprietà torna a NO.

Una cosa da notare è che webViewDidFinishLoad sparerà più di una volta se si è incorniciato / contenuto incorporato. Quindi devi tenere traccia di questo. Non dovrebbe essere davvero un problema se si sta caricando il contenuto locale.

mi piace soluzione monowerker migliore, ma un'altra soluzione sarebbe quella di trattenere UIWebView già reso tutto il tempo (in un oggetto più permanente controller della vista). Mi piacerebbe farlo solo se l'aspetto della soluzione di monowerker è troppo dirompente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top