Probé ayer mi aplicación basada en Cordova en el iPhone X Simulator en Xcode 9.0 (9A235) y no se veía bien. En primer lugar, en lugar de llenar el área de pantalla completa, había un área negra encima y debajo del contenido de la aplicación. Y lo que es peor, entre el contenido de la aplicación y el negro había dos barras blancas.
Al agregarlo, cordova-plugin-wkwebview-engine
Cordova procesa usando WKWebView (no UIWebView) corrige las barras blancas. Mi aplicación no se migra de UIWebView a WKWebView debido a problemas de rendimiento y pérdida de memoria cuando se usan cordova-plugin-wkwebview-engine
cuando se cargan imágenes descargadas de Inapp Adquiera contenido alojado en un lienzo HTML5 (el file://
acceso directo por Webview no es posible debido a restricciones de seguridad en WKWebView, por lo que los datos de la imagen se deben cargar a través de cordova-plugin-file
).
Estas capturas de pantalla muestran una aplicación de prueba con un fondo azul en <body
>. Arriba y debajo de UIWebView, puede ver las barras blancas, pero no con WKWebView:
(fuente: pbrd.co )
(fuente: pbrd.co )
Ambas vistas web de Cordova exhiben las áreas negras en comparación con una aplicación nativa que llena el área de pantalla completa:
<meta>
etiqueta a mi archivo cordova index.hml, ya que otros enumerados a continuación no funcionan. Estoy ejecutando Cordova 7x con cordova-ios 4.5.4. ¿Hay algo más que deba hacer?Respuestas:
Encontré la solución a las barras blancas aquí :
Establecer
viewport-fit=cover
en la<meta>
etiqueta de ventana gráfica, es decir:Las barras blancas en UIWebView luego desaparecen:
La solución para eliminar las áreas negras (proporcionadas por @dpogue en un comentario a continuación) es usar imágenes de LaunchStoryboard con
cordova-plugin-splashscreen
para reemplazar las imágenes de lanzamiento heredadas, utilizadas por Cordova de forma predeterminada. Para hacerlo, agregue lo siguiente a la plataforma iOS enconfig.xml
:Luego cree las imágenes con las siguientes dimensiones en
res/screen/ios
(elimine las existentes):Una vez que se eliminan las barras negras, hay otra cosa que debe abordar el iPhone X: la barra de estado es más grande que 20px debido a la "muesca", lo que significa que cualquier contenido en la parte superior de su aplicación Cordova quedará oscurecida. :
En lugar de codificar un relleno en píxeles, puede manejar esto automáticamente en CSS utilizando las nuevas
safe-area-inset-*
constantes en iOS 11.Nota: en iOS 11.0, se llamó a la función para manejar estas constantes,
constant()
pero en iOS 11.2 Apple la renombró aenv()
( ver aquí ), por lo tanto, para cubrir ambos casos, debe sobrecargar la regla CSS con ambos y confiar en el mecanismo de respaldo CSS para aplicar el uno apropiado:El resultado es el deseado: el contenido de la aplicación cubre la pantalla completa, pero la "muesca" no lo oculta:
He creado un proyecto de prueba de Cordova que ilustra los pasos anteriores: webview-test.zip
Notas:
Botones de pie de página
safe-area-inset-bottom
para evitar que se superpongan con el botón de inicio virtual en el iPhone X.<body>
ya que el pie de página está en una posición absoluta, por lo que necesitaba aplicarlo directamente al pie de página:cordova-plugin-statusbar
cordova-plugin-statusbar
pantalla se muestran incorrectamente en el iPhone X[email protected]
lanzamiento, así que asegúrese de usar al menos esta versión para aplicar a insertos de áreas segurasPantalla de bienvenida
[email protected]
, así que asegúrese de estar utilizando una versión reciente de lacordova-ios
plataforma.orientación del dispositivo
safe-area-inset
no se vuelva a aplicar, lo que hace que la muesca oscurezca nuevamente el contenido (como se destaca por jms en un comentario a continuación).cordova-plugin-wkwebview-engine
.Como referencia, esta es la edición original de Cordova que abrí que captura esto: https://issues.apache.org/jira/browse/CB-13273
fuente
viewport-fit=cover
toda mi aplicación solo muestra una pantalla en blanco y nada más. Estoy usando iOS11, Xcode9 en iPhone 7 Plus. ¿Alguien que experimente un comportamiento similar?constant
porenv
palabra clave - véase también: webkit.org/blog/7929/designing-websites-for-iphone-xPara una reparación manual de un proyecto cordova existente
Las barras negras
Agregue esto a su archivo info.plist . La reparación de la imagen de inicio es un problema separado, es decir, cómo agregar una imagen de inicio de iPhoneX
Las barras blancas
Establecer viewport-fit = cover en la metaetiqueta
fuente
UILaunchStoryboardName
y logró eliminar las barras negras. Pero mi pantalla de bienvenida se expande. ¿Alguna razón por qué? La respuesta aceptada no funciona para míHay 3 pasos que debes hacer
para los problemas de la barra de estado de iOs 11 y el encabezado del iPhone X
1. Cubierta de ajuste de ventana gráfica
Agregar
viewport-fit=cover
a la meta de su ventana gráfica<header>
Demostración: https://jsfiddle.net/gq5pt509 (index.html)
config.xml
interior<platform name="ios">
No omita este paso , esto es necesario para que la pantalla se ajuste al trabajo del iPhone X
Demostración: https://jsfiddle.net/mmy885q4 (config.xml)
Uso
safe-area-inset-left
,safe-area-inset-right
,safe-area-inset-top
, osafe-area-inset-bottom
Ejemplo: (¡Úselo en su caso!)
Bonificación: puede agregar clases de cuerpo como
is-android
ois-ios
en dispositivo listoEntonces puedes hacer algo como esto en CSS
fuente
En mi caso en el que cada pantalla de presentación se diseñó individualmente en lugar de autogenerarse o presentarse en un formato de guión gráfico, tuve que seguir con mi configuración de pantalla de Lanzamiento de legado y agregar imágenes de retrato y paisaje para orientar las orientaciones de iPhoneX 1125 × 2436 a la configuración.xml al igual que:
Después de agregarlos a config.xml ("viewport-fit = cover" ya estaba configurado en index.hml) mi aplicación creada con Ionic Pro llena toda la pantalla en dispositivos iPhoneX.
fuente
Solo una nota de que el
constant
uso de palabras clave para los márgenes de área segura se ha actualizado aenv
11.2 beta +https://webkit.org/blog/7929/designing-websites-for-iphone-x/
fuente
Solución para el problema de rotación de pantalla del iPhone X / XS
En iPhone X / XS, una rotación de pantalla hará que la altura de la barra de encabezado use un valor incorrecto, porque el cálculo de safe-area-inset- * no reflejaba los nuevos valores a tiempo para la actualización de la interfaz de usuario. Este error existe en UIWebView incluso en el último iOS 12. Una solución alternativa es insertar un margen superior de 1px y luego invertirlo rápidamente, lo que hará que se recalcule inmediatamente el área segura-recuadro- *. Una solución un tanto fea, pero funciona si tiene que quedarse con UIWebView por una razón u otra.
El propósito del código es hacer que document.body.style.marginTop cambie ligeramente y luego lo revierta. No necesariamente tiene que ser "1px". Puede elegir un valor que no haga que su interfaz de usuario parpadee, pero logre su propósito.
fuente
Estoy desarrollando aplicaciones cordova durante 2 años y pasé semanas para resolver problemas relacionados (por ejemplo: desplazamientos de vista web cuando se abre el teclado). Aquí hay una solución probada para iOS y Android
PD: estoy usando iScroll para desplazar contenido
Agregue a continuación a config.xml (primer ff después de x es opacidad)
Maneje su posición de desplazamiento usted mismo agregando eventos de enfoque a los elementos de entrada
Para Android, haga lo mismo pero en lugar de cordova-plugin-webviewcolor , instale cordova-plugin-statusbar y cordova-plugin-navigationbar-color
Aquí hay un código javascript que usa esos complementos para funcionar tanto en iOS como en Android:
fuente
Si instala versiones más recientes de
ionic
todo el mundo, puede ejecutarloionic cordova resources
y generará todas las imágenes de la pantalla de presentación junto con los tamaños correctos.fuente
Tenga en cuenta que este artículo: https://medium.com/the-web-tub/supporting-iphone-x-for-mobile-web-cordova-app-using-onsen-ui-f17a4c272fcd tiene diferentes tamaños que los anteriores y cordova página de complemento:
Cambié el tamaño de las imágenes como se indicó anteriormente y actualicé la
ios
plataforma y lacordova-plugin-splashscreen
última y el flash a la pantalla en blanco después de que se solucionó un segundo problema. Sin embargo, la imagen inicial de spash tiene un borde blanco en la parte inferior ahora.fuente
Default@3x~iphone~comany.png - 1242x2436
imagen