Как Iazy-загрузить и предварительно отобразить ViewController с UIWebView при запуске приложения?

#ios #uiwebview

#iOS #uiwebview

Вопрос:

Я работаю над приложением, в котором есть ряд иерархических UITableViewControllers, пока вы в конечном итоге не перейдете к UIWebView, который содержит информацию, которую вы ищете. Это работает нормально, за исключением того, что при загрузке UIWebView требуется некоторое время для рендеринга, и он мигает белым цветом перед загрузкой (все мои представления, включая UITableViewControllers и HTML-файлы, имеют черный фон)

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

Я попытался предварительно отобразить UIWebView, инициализировав его и загрузив, пока предыдущий UITableViewController все еще активен, но, похоже, это не работает. Это позволяет мне определять все необходимые параметры, но вызов метода loadView или чего-либо еще, что я пробовал, заставил его фактически загрузить этот черный фоновый HTML-код, прежде чем он выведет UIWebView на экран.

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

Ответ №1:

Как насчет webview.backgroundColor = [UIColor blackColor]; ?

Комментарии:

1. В первый раз он все еще мигает белым, хотя, похоже, на более короткий период.

Ответ №2:

Вы нашли это и ответили на это. Я делаю то же самое. Я обнаружил, что могу создать второй webview и начать заполнять его за пределами экрана. Я использую javascript для проверки прогресса, чтобы знать, что он отрисован. Однако примерно через 3 секунды после того, как у меня отобразятся две страницы (одна видимая, а другая нет), происходит сбой потока для веб-страниц.

Моя следующая идея — сделать оба экрана видимыми только на самом неиспользуемом экране в миле справа, чтобы конечный пользователь не мог его видеть.

Комментарии:

1. В итоге я просто создал большой непрозрачный черный вид под названием «maskingView», который закрывал WebView до тех пор, пока не получил обратный вызов делегата didFinishedLoading из WebView, после чего он скрыл maskingView. Это, наконец, сделало свое дело.