Предварительная загрузка UIWebView, избегая вспышки белого экрана - PullRequest
10 голосов
/ 13 мая 2011

Я работаю над приложением, которое имеет навигацию по таблицам, чтобы в конечном итоге перейти к UIWebView, которое отображает различную информацию.Тем не менее, переход от гладкости UITableView к медленному выигрышу UIWebView раздражает пользователя, поэтому я хочу улучшить этот опыт, насколько смогу.

В частности, фон обоих * 1006Страницы * и UIWebView имеют черный фон, но когда я открываю UIWebView, он мигает пустым белым около секунды (это относится как к локальным, так и к удаленным HTML-файлам.) Как я (в идеале) могу предварительно загрузить этот процесс,или (по крайней мере) сделать «вспышку» полностью черной, а не белой?Я попытался сделать фон представления / webView черным, но это не помогло.

В моем приложении прямо сейчас, когда пользователь выбирает ячейку, приложение просто загружает подкласс UIWebView и помещает его в стек навигации.У подкласса UIWebView есть индикатор активности, который запускается и прекращает анимацию на WebViewDidStartLoad и WebViewDidFinishLoad, который работает нормально, но ничего не помогает "белой вспышке".

Ответы [ 6 ]

10 голосов
/ 13 мая 2011

Я проверил это ... Я отправляю два метода, которые я использовал ...

 - (void)viewDidLoad {
        [super viewDidLoad]; //objWebView is the outlet of UIWebView
        [objWebView loadHTMLString:@"<html><body style=\"background-color:black;\"></body></html>" baseURL:nil];

        //the more the delay the errors will be less so within 0.1-0.3 would be fine
        [self performSelector:@selector(loadURL:) withObject:nil afterDelay:0.1]; 
    }

-(void)loadURL:(id)sender{
    [objWebView stopLoading]; //added this line to stop the previous request
    NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
    NSURLRequest *req = [NSURLRequest requestWithURL:url];
    [objWebView loadRequest:req];
}

здесь я выполняю запрос через 0,1 сек, в противном случае он будет выглядеть белымкак в твоем случае.Или вы можете указать время задержки в зависимости от времени .. Приветствия:)

9 голосов
/ 13 декабря 2011

Попробуйте по вашему

    -(void)viewDidLoad{
       myWebView.hidden = YES;

Затем по

    -(void)loadURL:(id)sender{  
        myWebView.hidden = NO;
2 голосов
/ 15 февраля 2013

Я использовал:

[webView setHidden:YES];  
[webView setDelegate:self];

при создании моего webView и создании запроса, а затем добавлении этого метода делегата для обработки завершенных запросов:

- (void) webViewDidFinishLoad:(UIWebView*)webView{  
    [webView setHidden:NO];  
}
0 голосов
/ 07 января 2014

Я решил эту проблему несколько лет назад, используя общий метод сокрытия UIWebView за UIImageView, затем удаляя UIImageView после задержки.

Но внезапно он вернулся, я думаю, на iOS 7.0.4,Это происходило на совершенно новом iPad Air, а также на старом iPad mini без сетчатки.После двух дней стрижки волос я наконец нашел обходной путь.

Допустим, у вас есть веб-просмотр, который ограничен альбомной ориентацией, инициализированный так:

WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024.0f, 768.0f)];

А потом высделайте его видимым после предварительной загрузки, например, с помощью метода createSubviewToFront или setHidden: NO в веб-представлении (или, альтернативно, с помощью setHidden: YES или removeFromSuperview в UIImageView).Но вместо плавного переключения представлений есть вспышка, и цвет фона мигает примерно полсекунды.

Исправление заключается в том, чтобы немного изменить размер вашего веб-просмотра:

WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024.01f, 768.0f)];

Проблема и исправление очень воспроизводимы.Он работает с таким небольшим изменением, как четвертое десятичное место (1024.0001f).На пятом десятичном знаке (1024.00001f) вспышка возвращается.Значение высоты (768.0f), похоже, не имело значения.

0 голосов
/ 26 марта 2013

Успешно сделал это. Вы должны сначала создать представление в Интерфейсном Разработчике. Затем загрузите HTML-код в веб-просмотр, используя initWithFrame в инициализации вашего ViewController, который содержит веб-просмотр (вот где происходит волшебство):

CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
webView = [[UIWebView alloc] initWithFrame:webFrame];

Затем просто загрузите веб-вид в представление в viewWillAppear:

[viewWeb addSubview:webView];

Это действительно вопрос проектирования интерфейса, который быстрее рисует непосредственно в представлении или рисует в подпредставлении, а затем рисует это подпредставление в представлении?

0 голосов
/ 28 февраля 2013

Или, вместо того, чтобы обойти проблему, вы можете просто установить цвет фона вашего веб-просмотра на любой цвет фона, который вы используете.Если, конечно, вы не используете изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...