我找到了解决白条here的方法:
在视口<meta>标签上设置viewport-fit=cover,即:
<meta name="viewport" content="initial-scale=1, width=device-width, height=device-height, viewport-fit=cover">
UIWebView 中的白条随即消失:
删除黑色区域的解决方案(在下面的评论中由@dpogue 提供)是使用LaunchStoryboard images 和cordova-plugin-splashscreen 来替换Cordova 默认使用的旧版启动图像。为此,请将以下内容添加到config.xml 中的 iOS 平台:
<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>
然后在res/screen/ios 中创建具有以下尺寸的图像(删除任何现有的图像):
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
一旦黑条被移除,还有一个与 iPhone X 不同的问题需要解决:由于“缺口”,状态栏大于 20 像素,这意味着您的 Cordova 应用程序最顶部的任何内容都将被它遮住了:
您可以使用 iOS 11 中的新 safe-area-inset-* 常量在 CSS 中自动处理此问题,而不是硬编码以像素为单位的填充。
注意:在 iOS 11.0 中处理这些常量的函数被称为 constant(),但在 iOS 11.2 中,Apple 将其重命名为 env() (see here),
因此,要涵盖这两种情况,您需要同时使用这两种情况重载 CSS 规则,并依靠 CSS fallback mechanism 来应用适当的一种:
body{
padding-top: constant(safe-area-inset-top);
padding-top: env(safe-area-inset-top);
}
结果如愿:应用内容覆盖全屏,但不被“缺口”遮挡:
我创建了一个 Cordova 测试项目来说明上述步骤:webview-test.zip
注意事项:
页脚按钮
- 如果您的应用有页脚按钮(就像我的一样),您还需要应用
safe-area-inset-bottom 以避免它们与 iPhone X 上的虚拟 Home 按钮重叠。
- 就我而言,我无法将其应用于
<body>,因为页脚是绝对定位的,因此我需要将其直接应用于页脚:
.toolbar-footer{
margin-bottom: constant(safe-area-inset-bottom);
margin-bottom: env(safe-area-inset-bottom);
}
cordova-plugin-statusbar
- iPhone X 上的状态栏大小已更改,因此旧版本的
cordova-plugin-statusbar 在 iPhone X 上显示不正确
-
Mike Hartington 已创建 this pull request,它应用了必要的更改。
- 此版本已合并到
cordova-plugin-statusbar@2.3.0 版本中,因此请确保您至少使用此版本以应用于安全区域插入
闪屏
设备方向
- 在 iOS 11.0 上使用 UIWebView 时,从纵向 > 横向 > 纵向旋转会导致
safe-area-inset 不会被重新应用,从而导致内容再次被凹口遮挡(正如 jms 在下面的评论中突出显示的那样)。
- 如果应用以横向启动然后旋转为纵向,也会发生这种情况
- 通过
cordova-plugin-wkwebview-engine 使用 WKWebView 时不会发生这种情况。
- 雷达报告:http://www.openradar.me/radar?id=5035192880201728
-
更新:这似乎已在 iOS 11.1 中修复
作为参考,这是我打开的原始 Cordova 问题,其中包含以下内容:https://issues.apache.org/jira/browse/CB-13273