Ich habe gestern meine Cordova-basierte App auf dem iPhone X Simulator in Xcode 9.0 (9A235) getestet und sie sah nicht gut aus. Erstens, anstatt den Vollbildbereich auszufüllen, gab es einen schwarzen Bereich über und unter dem App-Inhalt. Und schlimmer noch, zwischen dem App-Inhalt und dem Schwarz befanden sich zwei weiße Balken.
Durch Hinzufügen von cordova-plugin-wkwebview-engine
Cordova-Renderern mit WKWebView (nicht UIWebView) werden die weißen Balken korrigiert. Von meiner App wird aufgrund von Leistungs- und Speicherverlustproblemen bei der Verwendung, cordova-plugin-wkwebview-engine
die beim Laden von aus Inapp Purchase gehosteten Inhalten in einen HTML5-Canvas auftreten, keine Migration von UIWebView zu WKWebView durchgeführt (ein direkter file://
Zugriff über die Webview ist aufgrund von Sicherheitsbeschränkungen in WKWebView nicht möglich Die Bilddaten müssen über geladen werden cordova-plugin-file
.
Diese Screenshots zeigen eine Test-App mit einem blauen Hintergrund auf dem <body
>. Über und unter UIWebView sehen Sie die weißen Balken, jedoch nicht mit WKWebView:
(Quelle: pbrd.co )
(Quelle: pbrd.co )
Beide Cordova-Webansichten weisen im Vergleich zu einer nativen App, die den gesamten Bildschirmbereich ausfüllt, die schwarzen Bereiche auf:
<meta>
Tags zu meiner Datei cordova index.hml, wie andere unten aufgeführt, funktioniert nicht. Ich verwende Cordova 7x mit Cordova-ios 4.5.4. Muss ich noch etwas tun?Antworten:
Ich habe hier die Lösung für die weißen Balken gefunden :
Legen Sie
viewport-fit=cover
das Ansichtsfenster-<meta>
Tag fest, dh: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 hinzuconfig.xml
:Erstellen Sie dann die Bilder mit den folgenden Abmessungen in
res/screen/ios
(entfernen Sie alle vorhandenen):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 inenv()
( 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: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
safe-area-inset-bottom
, um zu vermeiden, dass sie von der virtuellen Home-Taste auf dem iPhone X überlappt werden.<body>
da die Fußzeile absolut positioniert ist. Daher musste ich sie direkt auf die Fußzeile anwenden:Cordova-Plugin-Statusleiste
cordova-plugin-statusbar
Anzeige auf dem iPhone X falsch sind[email protected]
Version integriert. Stellen Sie daher sicher, dass Sie mindestens diese Version verwenden, um sie auf Safe-Area-Insets anzuwendenBegrüßungsbildschirm
[email protected]
Sie daher sicher, dass Sie eine aktuelle Version dercordova-ios
Plattform verwenden.Geräteorientierung
safe-area-inset
nicht erneut angewendet, wodurch der Inhalt erneut durch die Kerbe verdeckt wird (wie von jms in einem Kommentar unten hervorgehoben).cordova-plugin-wkwebview-engine
.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
quelle
viewport-fit=cover
zeigt meine gesamte App beim Hinzufügen nur einen leeren weißen Bildschirm und sonst nichts. Ich verwende iOS11, Xcode9 auf dem iPhone 7 Plus. Hat jemand ein ähnliches Verhalten?constant
fürenv
Schlüsselwort - siehe auch: webkit.org/blog/7929/designing-websites-for-iphone-xFür eine manuelle Korrektur eines vorhandenen Cordova-Projekts
Die schwarzen Balken
Fügen Sie dies Ihrer info.plist- Datei hinzu. Zur Festsetzung der Startbild wird also ein anderes Thema Wie iPhoneX Einführung Bild hinzufügen
Die weißen Balken
Setzen Sie im Meta-Tag viewport-fit = cover
quelle
UILaunchStoryboardName
und es gelang mir , die schwarzen Balken zu entfernen. Aber mein Begrüßungsbildschirm wird erweitert. Irgendein Grund warum? Die akzeptierte Antwort funktioniert nicht für michEs gibt 3 Schritte, die Sie tun müssen
für iOs 11 Statusleiste & iPhone X Header Probleme
1. Abdeckung für das Ansichtsfenster
Fügen
viewport-fit=cover
Sie das Meta in Ihrem Ansichtsfenster hinzu<header>
Demo: https://jsfiddle.net/gq5pt509 (index.html)
config.xml
Inneren weitere Begrüßungsbilder hinzu<platform name="ios">
Überspringen Sie diesen Schritt nicht . Dies ist erforderlich, um den Bildschirm für die Arbeit mit dem iPhone X fit zu machen
Demo: https://jsfiddle.net/mmy885q4 (config.xml)
Verwenden Sie
safe-area-inset-left
,safe-area-inset-right
,safe-area-inset-top
odersafe-area-inset-bottom
Beispiel: (Verwenden Sie in Ihrem Fall!)
Bonus: Sie können Körperklassen wie
is-android
oderis-ios
auf Deviceready hinzufügenSie können also so etwas in CSS tun
quelle
In meinem Fall, in dem jeder Begrüßungsbildschirm einzeln entworfen wurde, anstatt automatisch generiert oder in einem Storyboard-Format angeordnet zu werden, musste ich mich an meine Legacy-Startbildschirmkonfiguration halten und Hoch- und Querformatbilder hinzufügen, um die Ausrichtung von iPhoneX 1125 × 2436 auf die config.xml auszurichten wie so:
Nachdem ich diese zu config.xml hinzugefügt habe ("viewport-fit = cover" wurde bereits in index.hml festgelegt), füllt meine mit Ionic Pro erstellte App den gesamten Bildschirm auf iPhoneX-Geräten aus.
quelle
Nur ein Hinweis, dass die
constant
Verwendung des Schlüsselworts für Sicherheitsbereichsränderenv
auf 11.2 Beta + aktualisiert wurdehttps://webkit.org/blog/7929/designing-websites-for-iphone-x/
quelle
Behebung des Problems mit der Bildschirmrotation des iPhone X / XS
Auf dem iPhone X / XS führt eine Bildschirmdrehung dazu, dass die Höhe der Kopfzeile einen falschen Wert verwendet, da die Berechnung des Safe-Area-Inset- * die neuen Werte nicht rechtzeitig für die Aktualisierung der Benutzeroberfläche widerspiegelte. Dieser Fehler ist in UIWebView auch unter dem neuesten iOS 12 vorhanden. Eine Problemumgehung besteht darin, einen oberen Rand von 1 Pixel einzufügen und ihn dann schnell umzukehren, wodurch eine sofortige Neuberechnung des Safe-Area-Inset- * ausgelöst wird. Eine etwas hässliche Lösung, die jedoch funktioniert, wenn Sie aus dem einen oder anderen Grund bei UIWebView bleiben müssen.
Der Zweck des Codes besteht darin, das Dokument.body.style.marginTop geringfügig zu ändern und es dann umzukehren. Es muss nicht unbedingt "1px" sein. Sie können einen Wert auswählen, der nicht zum Flackern Ihrer Benutzeroberfläche führt, aber seinen Zweck erfüllt.
quelle
Ich entwickle Cordova-Apps seit 2 Jahren und habe Wochen damit verbracht, verwandte Probleme zu lösen (z. B. Webview-Bildlauf beim Öffnen der Tastatur). Hier ist eine getestete und bewährte Lösung für iOS und Android
PS: Ich verwende iScroll zum Scrollen von Inhalten
Fügen Sie unten zu config.xml hinzu (erstes ff nach x ist Deckkraft)
Behandeln Sie Ihre Bildlaufposition selbst, indem Sie Eingabeelementen Fokusereignisse hinzufügen
Machen Sie für Android dasselbe, aber installieren Sie anstelle von Cordova-Plugin-Webviewcolor Cordova-Plugin-Statusleiste und Cordova-Plugin-Navigationsleistenfarbe
Hier ist ein Javascript-Code, der diese Plugins verwendet, um sowohl auf iOS als auch auf Android zu funktionieren:
quelle
Wenn Sie neuere Versionen von
ionic
global installieren , können Sie diese ausführenionic cordova resources
und alle Begrüßungsbildschirme mit den richtigen Größen für Sie generieren.quelle
Bitte beachten Sie, dass dieser Artikel: https://medium.com/the-web-tub/supporting-iphone-x-for-mobile-web-cordova-app-using-onsen-ui-f17a4c272fcd andere Größen als oben und Cordova hat Plugin-Seite:
Ich habe die Größe der Bilder wie oben geändert und die
ios
Plattformcordova-plugin-splashscreen
auf den neuesten Stand gebracht und den Blitz auf den weißen Bildschirm gebracht, nachdem ein zweites Problem behoben wurde. Das anfängliche Spash-Bild hat jetzt jedoch unten einen weißen Rand.quelle
Default@3x~iphone~comany.png - 1242x2436
image