J'ai trouvé la solution aux barres blanches ici :
Défini viewport-fit=cover
sur la <meta>
balise de la fenêtre , c'est-à-dire:
<meta name="viewport" content="initial-scale=1, width=device-width, height=device-height, viewport-fit=cover">
Les barres blanches dans UIWebView disparaissent alors:
La solution pour supprimer les zones noires (fournies par @dpogue dans un commentaire ci-dessous) consiste à utiliser les images LaunchStoryboard avec cordova-plugin-splashscreen
pour remplacer les anciennes images de lancement, utilisées par défaut par Cordova. Pour ce faire, ajoutez ce qui suit à la plate-forme iOS dans config.xml
:
<platform name="ios">
<splash src="res/screen/ios/Default@2x~iphone~anyany.png" />
<splash src="res/screen/ios/Default@2x~iphone~comany.png" />
<splash src="res/screen/ios/Default@2x~iphone~comcom.png" />
<splash src="res/screen/ios/Default@3x~iphone~anyany.png" />
<splash src="res/screen/ios/Default@3x~iphone~anycom.png" />
<splash src="res/screen/ios/Default@3x~iphone~comany.png" />
<splash src="res/screen/ios/Default@2x~ipad~anyany.png" />
<splash src="res/screen/ios/Default@2x~ipad~comany.png" />
<!-- more iOS config... -->
</platform>
Créez ensuite les images avec les dimensions suivantes dans res/screen/ios
(supprimez toutes les images existantes):
Default@2x~iphone~anyany.png - 1334x1334
Default@2x~iphone~comany.png - 750x1334
Default@2x~iphone~comcom.png - 1334x750
Default@3x~iphone~anyany.png - 2208x2208
Default@3x~iphone~anycom.png - 2208x1242
Default@3x~iphone~comany.png - 1242x2208
Default@2x~ipad~anyany.png - 2732x2732
Default@2x~ipad~comany.png - 1278x2732
Une fois les barres noires supprimées, il y a une autre chose différente à propos de l'iPhone X: la barre d'état est plus grande que 20 pixels en raison de l '«encoche», ce qui signifie que tout contenu tout en haut de votre application Cordova sera masqué par elle. :
Plutôt que de coder en dur un remplissage en pixels, vous pouvez gérer cela automatiquement dans CSS en utilisant les nouvelles safe-area-inset-*
constantes d'iOS 11.
Remarque: dans iOS 11.0, la fonction permettant de gérer ces constantes a été appelée, constant()
mais dans iOS 11.2, Apple l'a renommée env()
( voir ici ), par conséquent, pour couvrir les deux cas, vous devez surcharger la règle CSS avec les deux et compter sur le mécanisme de secours CSS pour appliquer le approprié:
body{
padding-top: constant(safe-area-inset-top);
padding-top: env(safe-area-inset-top);
}
Le résultat est alors celui souhaité: le contenu de l'application couvre le plein écran, mais n'est pas masqué par le "cran":
J'ai créé un projet de test Cordova qui illustre les étapes ci-dessus: webview-test.zip
Remarques:
Boutons de pied de page
- Si votre application possède des boutons de pied de page (comme le mien), vous devrez également postuler
safe-area-inset-bottom
pour éviter qu'ils ne soient superposés par le bouton d'accueil virtuel de l'iPhone X.
- Dans mon cas, je ne pouvais pas appliquer cela à
<body>
car le pied de page est absolument positionné, je devais donc l'appliquer directement au pied de page:
.toolbar-footer{
margin-bottom: constant(safe-area-inset-bottom);
margin-bottom: env(safe-area-inset-bottom);
}
cordova-plugin-statusbar
- La taille de la barre d'état a changé sur l'iPhone X, les anciennes versions de l'
cordova-plugin-statusbar
affichage ne s'affichent donc pas correctement sur l'iPhone X
- Mike Hartington a créé cette pull request qui applique les modifications nécessaires.
- Cela a été fusionné dans la
cordova-plugin-statusbar@2.3.0
version, alors assurez-vous que vous utilisez au moins cette version pour appliquer aux insertions de zone de sécurité
écran de démarrage
- Les contraintes du storyboard LaunchScreen ont changé sur iOS 11 / iPhone X, ce qui signifie que l'écran de démarrage a semblé "sauter" au lancement lors de l'utilisation des versions existantes du plugin ( voir ici ).
- Cela a été capturé dans le rapport de bogue CB-13505 , corrigé PR cordova-ios # 354 et publié dans
cordova-ios@4.5.4
, alors assurez-vous d'utiliser une version récente de la cordova-ios
plate - forme.
orientation de l'appareil
- Lorsque vous utilisez UIWebView sur iOS 11.0, la rotation de portrait> paysage> portrait empêche la
safe-area-inset
réapplication du contenu, ce qui rend le contenu à nouveau masqué par l'encoche (comme souligné par jms dans un commentaire ci-dessous).
- Se produit également si l'application est lancée en mode paysage puis tournée en portrait
- Cela ne se produit pas lors de l'utilisation de WKWebView via
cordova-plugin-wkwebview-engine
.
- Rapport radar: http://www.openradar.me/radar?id=5035192880201728
- Mise à jour : cela semble avoir été corrigé dans iOS 11.1
Pour référence, il s'agit du numéro original de Cordova que j'ai ouvert et qui capture ceci: https://issues.apache.org/jira/browse/CB-13273