2013-03-27 7 views
18

Używam UIWebView, aby wyświetlić ekran "Informacje", wyświetlając dołączony plik HTML. Hierarchia widoków mojej aplikacji to: UITabBarController/UIViewController/UIWebView.Jak zapobiec początkowemu białemu fleszowi podczas wyświetlania interfejsu UIWebView?

Problem polega na tym, że strona HTML ma ciemne tło, a po pierwszym dotknięciu karty białe tło jest widoczne na krótko przed wyświetleniem strony internetowej. Próbowałem ustawić kolor tła UIWebView, ale to nie rozwiązuje problemu. Problem występuje, niezależnie od tego, czy załaduję zawartość w postaci viewDidLoad lub viewWillAppear.

+0

można ukryć 'UIWebView' aż WebView nie skończyć załadunek i ustaw to zostały odkryte w' webViewDidFinishLoading' – nsgulliver

+0

Chyba rzeczywiście trzeba zrobić odwrotnie: Ie, pokazać je natychmiast, bez zwłoki, tak aby białe tło nigdy nie jest widoczne. – Dogweather

Odpowiedz

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

Dobrze, że działało. Przy okazji, czy wiesz, jak "załadować" zawartość, gdy uruchomi się aplikacja? Próbuję to zrobić z poziomu delegata aplikacji i paska kart, ale nie mam szczęścia. – Dogweather

+0

Znalazłem rozwiązanie: wysłanie -view do UIView spowoduje jego wstępne załadowanie poprawnie. – Dogweather

+1

Dziękujemy - Działa to z 'WKWebView' oraz –

6

// obciążenie 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]]; 

Dodaj ten delegować po załadowaniu

// flicker fix 

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

    [UIView setAnimationDuration:0.30]; 

    self.webview.alpha = 1; 

    [UIView commitAnimations]; 

} 
+0

jest to dobre rozwiązanie. ten, w którym ustawiłeś kolor tła widoku strony, który chcesz wyczyścić, nie działał dla mnie. –

+1

Zastanawiam się, dlaczego iOS 8 nadal przedstawia ten błąd. Witaj Apple, patrzę na ciebie! – SpaceDog

1

ja również napotkał ten sam problem, rozwiązanie znalazłem jest następujący.

-(void)viewDidLoad { 
    [super viewDidLoad]; 

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

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

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

self.webView.hidden = NO; 
} 
Powiązane problemy