Вчера я протестировал свое приложение на основе Cordova на iPhone X Simulator в Xcode 9.0 (9A235), и оно выглядело не очень хорошо. Во-первых, вместо заполнения всей области экрана над и под содержимым приложения была черная область. И что еще хуже, между содержимым приложения и черным было две белых полосы.
Добавление cordova-plugin-wkwebview-engine
так, чтобы Cordova визуализировала с использованием WKWebView (не UIWebView), исправляет белые полосы. Мое приложение не переносится из UIWebView в WKWebView из-за проблем с производительностью и утечкой памяти при использовании, cordova-plugin-wkwebview-engine
которые возникают при загрузке изображений, загруженных из Inapp. Покупка размещенного контента в холст HTML5 (прямой file://
доступ через Webview невозможен из-за ограничений безопасности в WKWebView, поэтому данные изображения должны быть загружены через cordova-plugin-file
).
На этих снимках экрана показано тестовое приложение с синим фоном, установленным на <body
>. Выше и ниже UIWebView вы можете видеть белые полосы, но не с WKWebView:
(источник: pbrd.co )
(источник: pbrd.co )
Оба Cordova Webviews показывают черные области по сравнению с собственным приложением, которое заполняет всю область экрана:
<meta>
тега в мой файл cordova index.hml, поскольку другие, перечисленные ниже, не работают. Я использую Cordova 7x с cordova-ios 4.5.4 - что еще мне нужно сделать?Ответы:
Я нашел решение для белых полос здесь :
Устанавливается
viewport-fit=cover
в<meta>
теге области просмотра , то есть:После этого белые полосы в UIWebView исчезнут:
Решение для удаления черных областей (предоставленное @dpogue в комментарии ниже) заключается в использовании изображений LaunchStoryboard с
cordova-plugin-splashscreen
заменой устаревших изображений запуска, используемых Cordova по умолчанию. Для этого добавьте на платформу iOS следующееconfig.xml
:Затем создайте изображения со следующими размерами
res/screen/ios
(удалите все существующие):После удаления черных полос в iPhone X есть еще одна особенность, которую нужно решить: строка состояния больше 20 пикселей из-за «выемки», что означает, что любой контент в верхней части вашего приложения Cordova будет скрыт им. :
Вместо того, чтобы жестко кодировать отступы в пикселях, вы можете обрабатывать это автоматически в CSS, используя новые
safe-area-inset-*
константы в iOS 11.Примечание: в iOS 11.0 была вызвана функция для обработки этих констант,
constant()
но в iOS 11.2 Apple переименовала ее вenv()
( см. Здесь ), поэтому, чтобы охватить оба случая, вам нужно перегрузить правило CSS обоими и полагаться на резервный механизм CSS для применения подходящий:Результат будет таким, каким вы хотели: содержимое приложения занимает весь экран, но не закрывается «выемкой»:
Я создал тестовый проект Cordova, который иллюстрирует вышеуказанные шаги: webview-test.zip
Ноты:
Кнопки нижнего колонтитула
safe-area-inset-bottom
чтобы избежать их перекрытия виртуальной кнопкой «Домой» на iPhone X.<body>
поскольку нижний колонтитул абсолютно позиционирован, поэтому мне нужно было применить его непосредственно к нижнему колонтитулу:Cordova-плагин-статусной
cordova-plugin-statusbar
некорректно отображаются на iPhone Xcordova-plugin-statusbar@2.3.0
выпуском, поэтому убедитесь, что вы используете хотя бы эту версию для применения к вставкам безопасной области.заставка
cordova-ios@4.5.4
, поэтому убедитесь, что вы используете последнюю версиюcordova-ios
платформы.ориентация устройства
safe-area-inset
к повторному применению, в результате чего контент снова скрывается за выемкой (как выделено jms в комментарии ниже).cordova-plugin-wkwebview-engine
.Для справки, это исходная проблема Кордовы, которую я открыл, которая фиксирует это: https://issues.apache.org/jira/browse/CB-13273
источник
viewport-fit=cover
мое приложение показывает пустой белый экран и ничего больше. Я использую iOS11, Xcode9 на iPhone 7 Plus. Кто-нибудь испытывает подобное поведение?constant
отenv
ключевого слова - см. Также: webkit.org/blog/7929/designing-websites-for-iphone-xДля ручного исправления существующего проекта Cordova
Черные полосы
Добавьте это в свой файл info.plist . Исправление изображения запуска - это отдельный вопрос, например, как добавить изображение запуска iPhoneX
Белые полосы
Установите viewport-fit = cover в метатеге
источник
UILaunchStoryboardName
и ему удалось удалить черные полосы. Но мой экран-заставка расширяется. По какой причине? Принятый ответ не работает для меняВам нужно сделать 3 шага
для строки состояния iOs 11 и проблем с заголовком iPhone X
1. Крышка смотрового окна.
Добавить
viewport-fit=cover
в мета вашего окна просмотра в<header>
Демо: https://jsfiddle.net/gq5pt509 (index.html)
config.xml
интерьер<platform name="ios">
Dont пропустите этот шаг , это требуется для получения экрана подходит для iPhone X работы
Демо: https://jsfiddle.net/mmy885q4 (config.xml)
Используйте
safe-area-inset-left
,safe-area-inset-right
,safe-area-inset-top
илиsafe-area-inset-bottom
Пример: (Используйте в своем случае!)
Бонус: вы можете добавить класс тела как
is-android
илиis-ios
на устройстве.Итак, вы можете сделать что-то подобное в CSS
источник
В моем случае, когда каждый экран-заставка был индивидуально разработан, а не автоматически сгенерирован или выложен в формате раскадровки, мне пришлось придерживаться своей конфигурации старого экрана запуска и добавить портретные и альбомные изображения для ориентации iPhoneX 1125 × 2436 в config.xml вот так:
После добавления их в config.xml («viewport-fit = cover» уже был установлен в index.hml) мое приложение, созданное с помощью Ionic Pro, заполняет весь экран на устройствах iPhoneX.
источник
Обратите внимание, что использование
constant
ключевого слова для полей безопасной зоны было обновлено доenv
версии 11.2 beta +.https://webkit.org/blog/7929/designing-websites-for-iphone-x/
источник
Исправлена проблема с поворотом экрана iPhone X / XS
На iPhone X / XS поворот экрана приведет к тому, что высота строки заголовка будет использовать неверное значение, потому что расчет safe-area-inset- * не отражал новые значения во время обновления пользовательского интерфейса. Эта ошибка существует в UIWebView даже в последней версии iOS 12. Обходной путь заключается в вставке верхнего поля в 1 пиксель и его быстром изменении в обратном направлении, что немедленно вызывает пересчет safe-area-inset- *. Несколько уродливое исправление, но оно работает, если вам по той или иной причине приходится использовать UIWebView.
Цель кода - вызвать небольшое изменение document.body.style.marginTop, а затем отменить его. Это не обязательно должно быть «1px». Вы можете выбрать значение, которое не заставит ваш пользовательский интерфейс мерцать, но достигнет своей цели.
источник
Я разрабатываю приложения Cordova в течение 2 лет, и я потратил недели на решение связанных проблем (например, прокрутка веб-страниц при открытии клавиатуры). Вот проверенное и проверенное решение для iOS и Android.
PS: я использую iScroll для прокрутки контента
Добавьте ниже в config.xml (первый ff после x - непрозрачность)
Управляйте своей позицией прокрутки самостоятельно, добавляя события фокуса к элементам ввода
Для Android сделайте то же самое, но вместо cordova-plugin-webviewcolor установите cordova-plugin-statusbar и cordova-plugin-navigationbar-color.
Вот код javascript, использующий эти плагины для работы как на ios, так и на android:
источник
Если вы установите более новые версии
ionic
глобально, вы можете запустить,ionic cordova resources
и он сгенерирует для вас все изображения заставки с правильными размерами.источник
Обратите внимание, что эта статья: https://medium.com/the-web-tub/supporting-iphone-x-for-mobile-web-cordova-app-using-onsen-ui-f17a4c272fcd имеет другие размеры, чем указано выше и cordova страница плагина:
Я изменил размер изображений, как указано выше, и обновил
ios
платформуcordova-plugin-splashscreen
до последней версии, а после исправления второй проблемы я стал белым экраном. Однако исходное изображение-спэш теперь имеет белую рамку внизу.источник
Default@3x~iphone~comany.png - 1242x2436
изображением