В настоящее время я разрабатываю приложение, которое использует UIWebView
для отображения некоторого контента. Он отлично работал с UIWebView
, но мы решили переключиться на WKWebView
, когда мы подняли требование ОС до 8.1. Мы заметили огромное улучшение производительности, но некоторые простые мысли, которые привыкли работать нормально, начали сбой сейчас. После некоторых исследований мне удалось понять, что происходит, но я не понимаю, как это исправить. Мне было интересно, может ли кто-нибудь помочь мне в этом...
URL-адрес наших загрузок webview занимает довольно много времени, чтобы закончить работу, поэтому перед запуском запроса мы загружаем статический счетчик, чтобы пользователь не чувствовал, что приложение сошло с ума. Цикл загрузки для этого статического содержимого уже настроен, поэтому мы не запускаем URL-запрос до тех пор, пока не будет загружен статический контент. Это прекрасно работает, если пользователь не поворачивает устройство. Вот что можно увидеть:
(мне пришлось изменить представление для целей конфиденциальности. Я не являюсь владельцем этого кода, в конце концов: -))
Я использую этот html-код для проверки размера. Цвет фона тела темно-серый, а уродливая светло-серая коробка расширяется до 100% ширины, вычитая края. Все идет нормально. Но если пользователь поворачивает устройство, это происходит:
Это жутко, поскольку, по-видимому, тело убирается, чтобы соответствовать максимальной ширине, но внутренний div обрабатывает неправильный относительный размер. Это продолжается до тех пор, пока запрос обрабатывается. Когда я заставляю тайм-аут сделать запрос неудачным, WKWebView
повторно отображает и показывает его правильный внешний вид:
Как только я это обнаружил, я безуспешно пытался подписаться на наблюдателя ротации и принудительно повторно отобразить на веб-просмотре:
- Вызов
viewNeedsDisplay
дляUIWebView
иUIScrollView
внутри - Изменение размера
UIWebView
- Повторное позиционирование содержимого
UIScrollView
Итак, мои выводы до сих пор:
- Это не произошло на
UIWebView
, только на новомWKWebView
(я снова это подтвердил, подтвердил) - Похоже, что
WKWebView
не отображает представления правильно, пока он загружается.
Кто-нибудь знает, есть ли способ исправить это? Что-то вроде одного магического свойства, которое я пропускаю, по умолчанию отключено? Я не хочу думать, что они сломали эту часть, когда они переделали веб-просмотр... Спасибо заранее:)
Изменить: Материал, который я пробовал с момента создания сообщения, без успеха:
- Изменение DOM асинхронно с помощью обратных вызовов javascript/native вращения не работает. Изменения не будут отображаться до завершения HTTP-запроса.
- Вызов http-запроса в другом потоке с использованием метода
dispatch_async
не работает. Под капотомWKWebView
, вероятно, заканчивается тем же потоком, что и если вы вызываете его из основного потока.