Ho trovato la soluzione alle barre bianche qui :
Impostato viewport-fit=cover
sul <meta>
tag viewport , ovvero:
<meta name="viewport" content="initial-scale=1, width=device-width, height=device-height, viewport-fit=cover">
Le barre bianche in UIWebView quindi scompaiono:
La soluzione per rimuovere le aree nere (fornita da @dpogue in un commento qui sotto) è usare le immagini LaunchStoryboard con cordova-plugin-splashscreen
per sostituire le immagini di avvio legacy, utilizzate da Cordova per impostazione predefinita. Per fare ciò, aggiungi quanto segue alla piattaforma iOS in 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>
Quindi crea le immagini con le seguenti dimensioni in res/screen/ios
(rimuovi quelle esistenti):
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
Una volta rimosse le barre nere, c'è un'altra cosa che è diversa nell'iPhone X da affrontare: la barra di stato è più grande di 20px a causa della "tacca", il che significa che qualsiasi contenuto nella parte superiore della tua app Cordova sarà oscurato da essa :
Anziché codificare un riempimento in pixel, puoi gestirlo automaticamente in CSS utilizzando le nuove safe-area-inset-*
costanti in iOS 11.
Nota: in iOS 11.0 è stata chiamata la funzione per gestire queste costanti constant()
ma in iOS 11.2 Apple l'ha rinominata in env()
( vedi qui ), quindi per coprire entrambi i casi è necessario sovraccaricare la regola CSS con entrambe e fare affidamento sul meccanismo di fallback CSS per applicare il quello appropriato:
body{
padding-top: constant(safe-area-inset-top);
padding-top: env(safe-area-inset-top);
}
Il risultato è quindi quello desiderato: il contenuto dell'app copre tutto lo schermo, ma non è oscurato dal "notch":
Ho creato un progetto di test Cordova che illustra i passaggi precedenti: webview-test.zip
Appunti:
Pulsanti piè di pagina
- Se la tua app ha pulsanti a piè di pagina (come la mia), dovrai anche fare domanda
safe-area-inset-bottom
per evitare che vengano sovrapposti dal pulsante Home virtuale su iPhone X.
- Nel mio caso, non potevo applicarlo
<body>
perché il piè di pagina è posizionato in modo assoluto, quindi dovevo applicarlo direttamente al piè di pagina:
.toolbar-footer{
margin-bottom: constant(safe-area-inset-bottom);
margin-bottom: env(safe-area-inset-bottom);
}
Cordova-plugin-statusbar
- La dimensione della barra di stato è cambiata su iPhone X, quindi le versioni precedenti della
cordova-plugin-statusbar
visualizzazione non vengono visualizzate correttamente su iPhone X.
- Mike Hartington ha creato questa richiesta pull che applica le modifiche necessarie.
- Questo è stato unito alla
cordova-plugin-statusbar@2.3.0
versione, quindi assicurati di utilizzare almeno questa versione da applicare agli inserti dell'area sicura
splashscreen
- I vincoli dello storyboard di LaunchScreen sono cambiati su iOS 11 / iPhone X, il che significa che la schermata iniziale sembrava "saltare" all'avvio quando si utilizzano versioni esistenti del plug-in ( vedere qui ).
- Questo è stato catturato nel bug report CB-13505 , corretto PR cordova-ios # 354 e rilasciato in
cordova-ios@4.5.4
, quindi assicurati di utilizzare una versione recente della cordova-ios
piattaforma.
orientamento del dispositivo
- Quando si utilizza UIWebView su iOS 11.0, la rotazione da verticale> orizzontale> verticale fa sì che il
safe-area-inset
non venga riapplicato, facendo sì che il contenuto venga nuovamente oscurato dalla tacca (come evidenziato da jms in un commento sotto).
- Succede anche se l'app viene avviata in orizzontale e ruotata in verticale
- Questo non accade quando si utilizza WKWebView tramite
cordova-plugin-wkwebview-engine
.
- Rapporto radar: http://www.openradar.me/radar?id=5035192880201728
- Aggiornamento : questo sembra essere stato risolto in iOS 11.1
Per riferimento, questo è il numero originale di Cordova che ho aperto che cattura questo: https://issues.apache.org/jira/browse/CB-13273