2013-03-27 5 views
18

Io uso un UIWebView per mostrare una schermata "Informazioni" visualizzando un file HTML in bundle. La gerarchia di visualizzazione della mia app è: UITabBarController/UIViewController/UIWebView.Come prevenire il flash bianco iniziale quando si visualizza un UIWebView?

Il problema è che la pagina HTML ha uno sfondo scuro, e la prima volta che la scheda viene toccata, uno sfondo bianco è visibile brevemente prima che venga visualizzata la vista web. Ho provato a impostare il colore di sfondo dello UIWebView, ma ciò non risolve il problema. Il problema si verifica se carico il contenuto in viewDidLoad o viewWillAppear.

+0

è possibile nascondere il 'UIWebView' fino WebView non è finito il caricamento, e impostarlo unhidden in' webViewDidFinishLoading' – nsgulliver

+0

Penso che in realtà bisogno di fare il contrario: Vale a dire, vederlo subito, senza indugio, in modo che lo sfondo bianco non è mai visibile. – Dogweather

risposta

54
webView.opaque = NO; 
webView.backgroundColor = [UIColor clearColor]; 
+0

Eccellente, ha funzionato. A proposito, sapresti come "pre-caricare" il contenuto all'avvio dell'app? Sto tentando di farlo dal delegato dell'app e dalla barra delle schede, ma non ho fortuna. – Dogweather

+0

Ho trovato la soluzione: inviando -view a un UIView causerà il precaricamento corretto. – Dogweather

+1

Grazie - Funziona anche con 'WKWebView' –

6

// carico index.html

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"www"]]; 
self.webview.delegate = self; 

self.webview.alpha = 0; // flicker fix 

[self.webview loadRequest:[NSURLRequest requestWithURL:url]]; 

Aggiungere questo delegare dopo aver caricato

// flicker fix 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [UIView beginAnimations:nil context:nil]; 

    [UIView setAnimationDuration:0.30]; 

    self.webview.alpha = 1; 

    [UIView commitAnimations]; 

} 
+0

questa è una bella soluzione. quello in cui si imposta il colore di sfondo della vista Web per cancellare non ha funzionato per me. –

+1

Mi chiedo perché iOS 8 continui a presentare questo bug. Ciao Apple, ti sto guardando! – SpaceDog

1

Ho anche incontrato lo stesso problema, la soluzione che ho trovato è il seguente.

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    [_webView setOpaque:NO]; 
    _webView.backgroundColor = [UIColor clearColor]; 
    self.webView.hidden = YES; 
} 

-(void)webViewDidFinishLoad:(UIWebView *)webView { 

//........................... 

self.webView.hidden = NO; 
} 
Problemi correlati