WKWebView не перенаправляет контент при загрузке другого URL-адреса

В настоящее время я разрабатываю приложение, которое использует UIWebView для отображения некоторого контента. Он отлично работал с UIWebView , но мы решили переключиться на WKWebView когда мы повысили требования к ОС до 8.1. Мы заметили огромное улучшение производительности, но некоторые простые мысли, которые привыкли работать нормально, начали сбой сейчас. После некоторых исследований мне удалось понять, что происходит, но я не понимаю, как это исправить. Мне было интересно, может ли кто-нибудь помочь мне в этом …

URL-адрес наших загрузок webview занимает довольно много времени, чтобы закончить работу, поэтому перед запуском запроса мы загружаем статический счетчик, чтобы пользователь не чувствовал, что приложение сошло с ума. Цикл загрузки для этого статического содержимого уже настроен, поэтому мы не запускаем URL-запрос до тех пор, пока не будет загружен статический контент. Это прекрасно работает, если пользователь не поворачивает устройство. Вот что можно увидеть:

(Мне пришлось изменить представление для целей конфиденциальности. Я не являюсь владельцем этого кода, в конце концов :-))

введите описание изображения здесь

Я использую этот HTML-код для проверки размера. Цвет фона тела темно-серый, а уродливая светло-серая коробка расширяется до 100% ширины, вычитая края. Все идет нормально. Но если пользователь поворачивает устройство, это происходит:

введите описание изображения здесь

Это жутко, поскольку, по-видимому, строение тела соответствует максимальной ширине, но внутренний div обрабатывает неправильный относительный размер. Это продолжается до тех пор, пока запрос обрабатывается. Когда я заставляю тайм-аут сделать запрос неудачным, WKWebView повторно отображает и показывает его правильный внешний вид:

введите описание изображения здесь

Как только я это обнаружил, я безуспешно пытался подписаться на наблюдателя ротации и повторно перенаправить на веб-просмотр:

  • Вызов viewNeedsDisplay для UIWebView и UIScrollView внутри
  • Изменение размера UIWebView
  • Повторное позиционирование содержимого UIScrollView

Итак, мои выводы до сих пор:

  • Это не произошло в UIWebView , только на новом WKWebView (я снова это подтвердил, подтвердил)
  • Похож, что WKWebView не визуализирует представления правильно, пока он находится на статусе загрузки

Кто-нибудь знает, есть ли способ исправить это? Что-то вроде одного магического свойства, которое я пропускаю, по умолчанию отключено? Я не хочу думать, что они сломали эту часть, когда они переделали веб-просмотр … Спасибо заранее 🙂

Edit: Stuff Я пытался с момента создания сообщения, без успеха:

  • Изменение асинхронно DOM с помощью обратных вызовов javascript / native вращения не работает . Изменения не будут отображаться до завершения HTTP-запроса.
  • Вызов HTTP-запроса в другом потоке с использованием метода dispatch_async не работает . Под капотом WKWebview вероятно, заканчивается тем же потоком, что и если вы вызываете его из основного потока.

Если вы не против немного взломать, есть способы сделать это с помощью Javascript:

  1. Вы можете добавить Javascript, который обнаруживает изменения, такие как window.orientation и window.onresize . Посмотрите, вызвано ли какое-либо событие, связанное с кадром. Если они вызываются, просто измените размер div на Javascript.

  2. Если события никогда не срабатывают, вы можете подделать их самостоятельно, используя оценкуJavaScript: completeHandler:

  3. Вы также можете сделать свои собственные события таким образом. Просто отправьте файл resize div каждый раз, когда вы обнаружите изменение ориентации устройства в своем приложении.

  4. Если вы загружаете Javascript, вы можете посмотреть async и defer <script> . Это означает, что вам придется изменить код в веб-просмотре.

Это не лучший способ приблизиться к этому, но для этого потребуется минимальное изменение.

Я также предлагаю вам заполнить отчет об ошибке на странице https://bugreport.apple.com/ , чтобы вы знали, является ли это ожидаемым поведением или нет.

Хотя у меня нет решения для WKWebView не рендеринга при загрузке контента, я бы предложил другое решение вашей проблемы.

Вы можете изменить вид загрузки со страницы, загруженной в веб-просмотр, на собственное представление iOS. Просто добавьте subview к основному виду, над веб-представлением, когда вы начнете загружать и удалять его при завершении загрузки. Это будет отлично работать с вращением, и вы можете иметь тот же опыт, что и раньше.

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

  • Разрешить непроверенные сертификаты ssl в WKWebView
  • Получить URL-адрес всех элементов, используемых с помощью WKWebView
  • Проблема WKWebView с прерывистым пустым экраном
  • Скрытие панели аксессуаров клавиатуры в WKWebView
  • Как очистить WKBackForwardList от WKWebView?
  • WKWebview Якорные теги на той же странице, а не woking
  • Отдельное хранилище файлов cookie для двоих (UIWebView или WKWebView)
  • Совместное использование файлов cookie между несколькими WKWebViews
  • Ошибка декодирования URL-адреса IOS10 WkWebView
  • Потяните, чтобы обновление не работало в iOS WebView
  • Очистка WkWebview между запросами
  • Interesting Posts

    Не удается вызвать методы делегирования / источника данных в реализации UITableView

    Как объявить возможности устройства для этого приложения?

    UINavigationBar, который изменяет прозрачность при прокрутке

    Цель приложения переопределяет параметр сборки «EMBEDDED_CONTENT_CONTAINS_SWIFT», определенный в Pods.xcconfig

    Копировать стилизованный текст из UIWebView?

    Являются ли размеры приложения testflight раздутыми на большое количество по сравнению с фактическими размерами загрузки после публикации?

    iOS 8 CLLocationManagerDelegate методы никогда не вызывают

    Как, если вообще, может ли сопутствующее приложение создавать пропуски с разными логотипами и логотипом?

    Почему Xcode 6.3 beta debugger показывает, что Swift NSData имеет количество байтов 190, но никаких свойств?

    Delphi4 XE / iOS / читать XML-файл /

    performSegueWithIdentifier не показывает контроллер представления, как ожидалось

    didMoveToParentViewController вызывается дважды

    Почему я не могу добавить файлы в Images.xcassets в Xcode 5?

    iOS: Что делает оттенок цвета на самом деле?

    Количество строк в UILabel в ячейке для отображения размера

    Давайте будем гением компьютера.