Saya menemukan solusi untuk bilah putih di sini :
Ditetapkan viewport-fit=cover
pada <meta>
tag viewport , yaitu:
<meta name="viewport" content="initial-scale=1, width=device-width, height=device-height, viewport-fit=cover">
Bilah putih di UIWebView kemudian menghilang:
Solusi untuk menghapus area hitam (disediakan oleh @dpogue dalam komentar di bawah) adalah dengan menggunakan gambar LaunchStoryboard dengan cordova-plugin-splashscreen
untuk menggantikan gambar peluncuran lama, yang digunakan oleh Cordova secara default. Untuk melakukannya, tambahkan yang berikut ini ke platform iOS di 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>
Kemudian buat gambar dengan dimensi berikut di res/screen/ios
(hapus yang sudah ada):
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
Setelah bilah hitam dihapus, ada hal lain yang berbeda tentang iPhone X yang harus diatasi: Bilah status lebih besar dari 20 piksel karena "takik", yang berarti konten apa pun di bagian paling atas dari aplikasi Cordova Anda akan dikaburkan olehnya :
Daripada melakukan hard-coding padding dalam piksel, Anda dapat menangani ini secara otomatis di CSS menggunakan safe-area-inset-*
konstanta baru di iOS 11.
Catatan: di iOS 11.0 fungsi untuk menangani konstanta ini dipanggil constant()
tetapi di iOS 11.2 Apple menamainya env()
( lihat di sini ), oleh karena itu untuk mencakup kedua kasus Anda perlu membebani aturan CSS dengan keduanya dan bergantung pada mekanisme fallback CSS untuk menerapkan yang sesuai:
body{
padding-top: constant(safe-area-inset-top);
padding-top: env(safe-area-inset-top);
}
Hasilnya kemudian seperti yang diinginkan: konten aplikasi menutupi layar penuh, tetapi tidak dikaburkan oleh "takik":
Saya telah membuat proyek uji Cordova yang menggambarkan langkah-langkah di atas: webview-test.zip
Catatan:
Tombol footer
- Jika aplikasi Anda memiliki tombol footer (seperti milik saya), Anda juga perlu menerapkannya
safe-area-inset-bottom
agar tidak tumpang tindih dengan tombol Home virtual di iPhone X.
- Dalam kasus saya, saya tidak dapat menerapkan ini
<body>
karena footer benar-benar diposisikan, jadi saya perlu menerapkannya langsung ke footer:
.toolbar-footer{
margin-bottom: constant(safe-area-inset-bottom);
margin-bottom: env(safe-area-inset-bottom);
}
cordova-plugin-statusbar
- Ukuran bilah status telah berubah di iPhone X, jadi versi lama
cordova-plugin-statusbar
tampilan salah di iPhone X.
- Mike Hartington telah membuat permintaan tarik ini yang menerapkan perubahan yang diperlukan.
- Ini digabungkan ke dalam
cordova-plugin-statusbar@2.3.0
rilis, jadi pastikan Anda menggunakan setidaknya versi ini untuk diterapkan ke safe-area-insets
splashscreen
- Batasan storyboard LaunchScreen berubah pada iOS 11 / iPhone X, yang berarti splashscreen tampak "melompat" saat diluncurkan ketika menggunakan versi plugin yang ada ( lihat di sini ).
- Ini ditangkap dalam laporan bug CB-13505 , memperbaiki PR cordova-ios # 354 dan dirilis
cordova-ios@4.5.4
, jadi pastikan Anda menggunakan versi cordova-ios
platform terbaru.
orientasi perangkat
- Saat menggunakan UIWebView di iOS 11.0, memutar dari potret> lanskap> potret menyebabkan
safe-area-inset
tidak diterapkan kembali, menyebabkan konten dikaburkan oleh takik lagi (seperti yang disorot oleh jms dalam komentar di bawah).
- Juga terjadi jika aplikasi diluncurkan dalam lanskap lalu diputar ke potret
- Ini tidak terjadi saat menggunakan WKWebView melalui
cordova-plugin-wkwebview-engine
.
- Laporan radar: http://www.openradar.me/radar?id=5035192880201728
- Pembaruan : ini tampaknya telah diperbaiki di iOS 11.1
Sebagai referensi, ini adalah masalah Cordova asli yang saya buka yang menangkap ini: https://issues.apache.org/jira/browse/CB-13273