Ich habe hier die Lösung für die weißen Balken gefunden :
Legen Sie viewport-fit=cover
das Ansichtsfenster- <meta>
Tag fest, dh:
<meta name="viewport" content="initial-scale=1, width=device-width, height=device-height, viewport-fit=cover">
Die weißen Balken in UIWebView verschwinden dann:
Die Lösung zum Entfernen der schwarzen Bereiche (bereitgestellt von @dpogue in einem Kommentar unten) besteht darin, LaunchStoryboard-Images zu verwenden cordova-plugin-splashscreen
, um die von Cordova standardmäßig verwendeten Legacy-Launch-Images zu ersetzen. Fügen Sie dazu der iOS-Plattform Folgendes hinzu 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>
Erstellen Sie dann die Bilder mit den folgenden Abmessungen in res/screen/ios
(entfernen Sie alle vorhandenen):
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
Sobald die schwarzen Balken entfernt sind, muss das iPhone X noch etwas anderes ansprechen: Die Statusleiste ist aufgrund der "Kerbe" größer als 20 Pixel, was bedeutet, dass alle Inhalte ganz oben in Ihrer Cordova-App dadurch verdeckt werden ::
Anstatt ein Auffüllen in Pixel fest zu codieren, können Sie dies in CSS mithilfe der neuen safe-area-inset-*
Konstanten in iOS 11 automatisch verarbeiten .
Hinweis: In iOS 11.0 wurde die Funktion zum Behandeln dieser Konstanten aufgerufen. constant()
In iOS 11.2 wurde sie von Apple in env()
( siehe hier ) umbenannt. Um beide Fälle abzudecken, müssen Sie die CSS-Regel mit beiden überladen und sich auf den CSS-Fallback-Mechanismus verlassen , um die Konstanten anzuwenden angemessen:
body{
padding-top: constant(safe-area-inset-top);
padding-top: env(safe-area-inset-top);
}
Das Ergebnis ist dann wie gewünscht: Der App-Inhalt deckt den gesamten Bildschirm ab, wird jedoch nicht durch die "Kerbe" verdeckt:
Ich habe ein Cordova-Testprojekt erstellt, das die obigen Schritte veranschaulicht: webview-test.zip
Anmerkungen:
Fußzeilentasten
- Wenn Ihre App Fußzeilentasten hat (wie meine), müssen Sie diese auch anwenden
safe-area-inset-bottom
, um zu vermeiden, dass sie von der virtuellen Home-Taste auf dem iPhone X überlappt werden.
- In meinem Fall konnte ich dies nicht anwenden,
<body>
da die Fußzeile absolut positioniert ist. Daher musste ich sie direkt auf die Fußzeile anwenden:
.toolbar-footer{
margin-bottom: constant(safe-area-inset-bottom);
margin-bottom: env(safe-area-inset-bottom);
}
Cordova-Plugin-Statusleiste
- Die Größe der Statusleiste hat sich auf dem iPhone X geändert, sodass ältere Versionen der
cordova-plugin-statusbar
Anzeige auf dem iPhone X falsch sind
- Mike Hartington hat diese Pull-Anfrage erstellt, die die erforderlichen Änderungen anwendet.
- Dies wurde in die
cordova-plugin-statusbar@2.3.0
Version integriert. Stellen Sie daher sicher, dass Sie mindestens diese Version verwenden, um sie auf Safe-Area-Insets anzuwenden
Begrüßungsbildschirm
- Die Einschränkungen für das LaunchScreen-Storyboard wurden unter iOS 11 / iPhone X geändert, was bedeutet, dass der Begrüßungsbildschirm beim Start bei Verwendung vorhandener Versionen des Plugins "zu springen" schien ( siehe hier ).
- Dies wurde im Fehlerbericht CB-13505 erfasst , PR cordova-ios # 354 behoben und in veröffentlicht. Stellen
cordova-ios@4.5.4
Sie daher sicher, dass Sie eine aktuelle Version der cordova-ios
Plattform verwenden.
Geräteorientierung
- Wenn Sie UIWebView unter iOS 11.0 verwenden und rotieren von Hochformat> Querformat> Hochformat, wird das
safe-area-inset
nicht erneut angewendet, wodurch der Inhalt erneut durch die Kerbe verdeckt wird (wie von jms in einem Kommentar unten hervorgehoben).
- Kommt auch vor, wenn die App im Querformat gestartet und dann im Hochformat gedreht wird
- Dies ist bei Verwendung von WKWebView über nicht der Fall
cordova-plugin-wkwebview-engine
.
- Radarbericht: http://www.openradar.me/radar?id=5035192880201728
- Update : Dies scheint in iOS 11.1 behoben worden zu sein
Als Referenz ist dies die ursprüngliche Cordova-Ausgabe, die ich geöffnet habe und die Folgendes erfasst: https://issues.apache.org/jira/browse/CB-13273