gpt4 book ai didi

ios - Cordova 应用程序无法在 iPhone X(模拟器)上正确显示

转载 作者:IT王子 更新时间:2023-10-29 07:28:48 26 4
gpt4 key购买 nike

我昨天在 Xcode 9.0 (9A235) 的 iPhone X 模拟器上测试了我基于 Cordova 的应用程序,它看起来不太好。首先,应用内容的上方和下方没有填满整个屏幕区域,而是黑色区域。更糟糕的是,在应用程序内容和黑色之间是两个白色条。

添加cordova-plugin-wkwebview-engine因此 Cordova 使用 WKWebView(而不是 UIWebView)呈现修复了白条。由于使用时的性能和内存泄漏问题,我的应用程序未从 UIWebView 迁移到 WKWebView cordova-plugin-wkwebview-engine当将从 Inapp Purchase 托管内容下载的图像加载到 HTML5 Canvas 时发生(由于 WKWebView 中的安全限制,无法通过 Webview 直接访问 file://,因此图像数据必须通过 cordova-plugin-file 加载)。

这些屏幕截图显示了在 <body 上设置了蓝色背景的测试应用程序>。在 UIWebView 上方和下方,您可以看到白色条,但使用 WKWebView 则看不到:


(来源:pbrd.co)


(来源:pbrd.co)

与充满全屏区域的 native 应用程序相比,两个 Cordova Webviews 都显示黑色区域:

最佳答案

我找到了解决白条的方法 here :

设置viewport-fit=cover在视口(viewport)上 <meta>标记,即:

<meta name="viewport" content="initial-scale=1, width=device-width, height=device-height, viewport-fit=cover">

然后 UIWebView 中的白条消失了:

去除黑色区域的解决方案(由 @dpogue 在下面的评论中提供)是使用 LaunchStoryboard imagescordova-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 应用最顶部的任何内容都将被显示被它遮住了:

您可以使用新的 safe-area-inset-* 在 CSS 中自动处理此问题,而不是以像素为单位对填充进行硬编码。 iOS 11 中的常量。

注意:在 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 上的虚拟主页按钮重叠。
  • 就我而言,我无法将其应用于 <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 中发布,因此请确保您至少使用此版本以应用于安全区域插入

启动画面

  • Lau​​nchScreen Storyboard限制在 iOS 11/iPhone X 上发生了变化,这意味着当使用现有版本的插件时启动画面似乎在启动时“跳跃”(see here)。
  • 这是在错误报告中捕获的 CB-13505 , 固定公关 cordova-ios#354并在 cordova-ios@4.5.4 中发布,因此请确保您使用的是最新版本的 cordova-ios平台。

设备方向

  • 在 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

关于ios - Cordova 应用程序无法在 iPhone X(模拟器)上正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46232812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com