Отсрочка viewWillAppear до webViewDidFinishLoad
У меня есть приложение, которое используетUIWebViews
в нескольких контроллерах представления.UIWebViews
используются для рендеринга локально сгенерированного HTML, медленный доступ к сети не требуется.
Чтобы сохранить память, я загружаю их только по запросу, как подсказывает viewcontrollerviewWillAppear
Перезвони. (И выгрузить закадровые экземпляры в ответ наdidReceiveMemoryWarning
Сообщения.)
Проблема в том, что пользователь видит html-файл, который иногда сопровождается вспышками стилей и другими неприятными артефактами. Я бы предпочел, чтобы рендеринг выполнялся за кадром, и раскрывал полностью визуализированный вид, когда он будет готов.
Было бы очень аккуратно иметь возможность иметьviewWillAppear
не возвращать, пока UIWebView не будет полностью отображен. Но как?
Я говорюUIWebView
что сделать, отправив емуloadHTMLString:baseURL:
сообщение. Это асинхронно, и через некоторое время (скоро) делегат веб-просмотра перезваниваетсяwebViewDidFinishLoad
.
Я экспериментировал с запуском внутриviewWillAppear
работает либоNSDefaultRunLoopMode
или жеUITrackingRunLoopMode
, Это работает в симуляторе (жалуется в лог
[CATransaction синхронизировать] вызывается внутри транзакции
но работает) но на устройстве он блокируется, сwebViewDidFinishLoad
никогда не вызывать.
(Кроме того, похоже, чтоUIWebView
загрузка свойства не работает. По крайней мере, после того, как я позвонюloadHTMLString:baseURL:
и до получения обратного звонка это не правда.)