Сокращение окна просмотра WKWebView не работает на iOS 9.3

В iOS 9.2 WKWebView, визуализирующий HTML с таблицами фиксированной ширины, превышающей ширину устройства, можно было приказать сжать содержимое, чтобы оно соответствовало размеру, добавив тег области просмотра, подобный этому:

<meta name="viewport" content="width=device-width, shrink-to-fit=YES">

Эта строка заставляла WKWebView эффективно уменьшать область просмотра, чтобы вся визуализированная страница помещалась в рамке просмотра без необходимости использования полос прокрутки. Например, рассмотрим следующий код при запуске в viewDidLoad в ванильном приложении с одним представлением:

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
WKWebView *newWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0,40,self.view.frame.size.width, self.view.frame.size.height - 40) configuration:wkWebConfig];
NSString *toRender = @"<head><meta name=\"viewport\" content=\"width=device-width, shrink-to-fit=YES\"></head><body><table width=700 style='background-color: blue; color:white; font-size=20px'><tr><td>this is some text that is long enough to exceed the width of the iphone 6 unless shrink-to-fit is applied</td></tr></table></body>";
[newWebView loadHTMLString:toRender baseURL:nil];
[self.view addSubview:newWebView];

Содержимое отображается следующим образом:

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

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

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

(Хотя на скриншоте этого не видно, там есть горизонтальная полоса прокрутки)

При поиске других вопросов в stackoverflow и других местах кажется, что большинство других людей предпочитают поведение 9.3. Тем не менее, мне нужно поведение 9.2, сжатие до подгонки. Итак, мой вопрос: кто-нибудь знает, как получить такое же поведение сжатия до подгонки в 9.3? И кто-нибудь знает, является ли это изменение преднамеренным или это ошибка, которая будет исправлена ​​в последующих выпусках?

Мой тестовый код можно найти по адресу https://github.com/nsolter/NSWebViewShrinkTest, в частности https://github.com/nsolter/NSWebViewShrinkTest/blob/master/NSWebViewShrinkTest/ViewController.m


person Nicholas Solter    schedule 14.04.2016    source источник


Ответы (1)


Я подал отчет об ошибке в Apple, и вот ответ:

«Нет, мы не хотим поддерживать поведение сжатия по размеру. Обходной путь — использовать метатег области просмотра, который правильно описывает ширину содержимого».

Я попробовал это. Если в теге окна просмотра вы укажете ширину фактической ширины html после его рендеринга, он будет правильно отображаться на ширине вашего устройства. В моем примере выше с шириной таблицы 700, если вы укажете: <meta name=\"viewport\" content=\"width=700, shrink-to-fit=YES\">

Тогда страница будет отображаться без горизонтальных полос прокрутки.

Обратите внимание, что вы не можете указать свойство области просмотра начального масштаба. Затем он не отображается с правильной шириной.

Это, очевидно, далеко не идеально, потому что вы, как правило, не знаете, какой будет ширина вашего отображаемого HTML-кода, пока вы его не отобразите. Мое текущее решение состоит в том, чтобы отобразить его один раз с шириной = ширина устройства, а затем снова отобразить его с шириной = X, где X — фактическая ширина отображаемой страницы в первый раз.

person Nicholas Solter    schedule 21.04.2016
comment
Я также использую width=device-width и сталкиваюсь с той же проблемой. Вы перезагружаете страницу с шириной = X ?? - person anoop4real; 13.04.2017
comment
По сути, да. На самом деле я визуализирую его в новом WKWebView, который в настоящее время не отображается, а затем переключаюсь на этот новый веб-просмотр. - person Nicholas Solter; 17.04.2017
comment
У вас есть образцы? - person anoop4real; 17.04.2017
comment
У меня нет ничего с открытым исходным кодом, которым я мог бы поделиться прямо сейчас. - person Nicholas Solter; 17.04.2017
comment
В порядке! Ответьте, если у вас есть шанс создать образец - person anoop4real; 17.04.2017