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 вероятно, заканчивается тем же потоком, что и если вы вызываете его из основного потока.

2 Solutions collect form web for “WKWebView не перенаправляет контент при загрузке другого URL-адреса”

Если вы не против немного взломать, есть способы сделать это с помощью 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 .

  • Как сделать снимок экрана части UIView?
  • Настройка категории AVAudioSession не влияет на звук из WKWebView
  • Ответ URL-адреса кэша для автономного просмотра с помощью WKWebView
  • Просмотр WKWebView Reader
  • Ошибка Ajax с HTTP-статусом 0 при использовании плагина Cordova WKWebView на iOS
  • Отображение индикатора активности на WKWebView с использованием быстрой
  • Почему WKWebView не отображает видео? - Swift 3
  • Тактика для ускорения WKWebView рендеринга loadHTMLString-d контента?
  • Можно ли использовать кеш между WKWebViews?
  • В чем разница между UIWebView и WKWebView при загрузке локальных ресурсов
  • com.apple.WebKit.WebContent drop 113 error: Не удалось найти указанную службу
  • Загрузка WKWebView при загрузке
  • Interesting Posts

    iOS / WatchKit: есть ли способ для приложения набора часов (swift) использовать код iOS (Objective C)?

    TableView слишком сильно отстает и занимает слишком много памяти Swift

    Импортировать библиотеку aurioTouch с помощью Swift

    AutoLayout – сохранить соотношение изображения с горизонтальными ограничениями (Swift Xcode 6)

    Swift помещает несколько IBOutlets в массив

    Как динамически всплывать и скрывать UIPickerView в iOS (Xamarin C #)?

    Загрузите dSYMs из Xcode Organizer, я получаю эту ошибку «Отсутствует запись приложения»

    Запуск приложения или магазина приложений из Safari?

    iOS AVAudioSession с применением фильтра верхних частот

    Flurry v 4.2.3 проблемы с связыванием

    Добавить жест в SKShapeNode в WatchOS3

    Сравнение наборов с массивами внутри

    Игровой центр в SpriteKit не увольняет лидера

    Поскольку вставка UITableViewAutomaticDimension возвращенных ячеек крошечная

    @IBInspectable: неправильные границы и фреймы во время выполнения, когда я добавляю subviews

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.