PhoneGap 和 iPhone 6 Plus 闪屏问题

Posted

技术标签:

【中文标题】PhoneGap 和 iPhone 6 Plus 闪屏问题【英文标题】:PhoneGap and iPhone 6 Plus splash screen issue 【发布时间】:2014-10-09 16:22:53 【问题描述】:

好的,所以在为 ios 8 和更大的 iPhone 更新我的应用程序时,我发现了一个我不知道如何解决的问题。

在我的 PhoneGap 应用程序中,我在 Xcode 中为启动画面添加了一个新资源库,我添加了两张新图片,一张用于 iPhone 6 肖像,一张用于 iPhone 6 Plus 肖像。

它们可以正常工作,应用现在无法像没有这些图像时那样扩展。

问题是,在 iPhone 6 Plus 上,当应用程序加载时,初始屏幕最初看起来很好,但在一两秒钟内它会改变大小并显示在屏幕外,就像屏幕改变了大小一样,现在一半标志不在屏幕上,有没有其他人看到这个并知道如何修复它?图片是 Apple 规定的正确尺寸,所以不知道为什么它会在应用加载时改变尺寸。

【问题讨论】:

你在使用xcode6cordova 3.6.3吗? 使用 Xcode 6.1 和 PhoneGap 3.5 iOS8需要使用cordova 3.6.3 从 PhoneGap 到使用 Cordova 会有什么变化吗?我知道它们基本上是一样的,但目前我使用的是PhoneGap,我是否只需安装cordova,然后在我的项目文件夹上运行更新命令? 将我的项目升级到 Cordova 3.6.3 并没有解决问题,启动屏幕仍在调整大小并延伸到屏幕边缘。 【参考方案1】:

我遇到了同样的问题,我将其范围缩小到闪屏插件 (org.apache.cordova.splashscreen)。以下是我在 iPhone 6 和 iPhone 6+ 上解决问题所需的步骤:

    更新到最新版本的闪屏插件(已在 GitHub 上修补): cordova plugin remove org.apache.cordova.splashscreen cordova plugin add https://github.com/apache/cordova-plugin-splashscreen.git 通过cordova重新创建整个iOS平台: cordova platform remove ios cordova platform add ios cordova build ios 确保您的 iPhone 6 和 iPhone 6+ 启动画面图像分别命名为 Default-667h@2x~iphone.pngDefault-736h@3x~iphone.png。然后,在 Xcode 中,将两个图像文件拖到 Project Navigator 中您的项目目标下的 Resources/splash(默认情况下位于屏幕左侧的窗格中)。

看起来,闪屏插件创建了一个假的闪屏,它应该与真实的 iOS 闪屏完美匹配,当你调用 splashscreen.hide() 时,你实际上隐藏了假的闪屏。只是,在 iPhone 6/6+ 的情况下,假启动画面与您当前使用 cordova plugin add org.apache.cordova.splashscreen 获得的插件版本错误,并且一旦隐藏真正的启动画面,您就会看到图像改变大小并移出屏幕。

【讨论】:

这个答案很好,但我要补充一件事:我发现命名文件 Default-667h.png 和 Default-736h.png 也适用(在 Cordova 3.7.0+ 中) iPhone 6/6+ 闪屏。【参考方案2】:

因此,由于我们项目设置方式的复杂性,我无法删除和添加 ios/android.我确实尝试创建一个新的 Cordova 3.6 项目并安装新的启动画面插件,但这也没有按预期工作。

我能够解决这个问题,虽然可能不是最好的解决方案,但这就是我所做的。

在 iOS 项目的 CordovaLib/CDVAvailability.h 文件中,我添加了两行:

#define CDV_IsIPhone6Plus() ([[UIScreen mainScreen] bounds].size.height == 736 && [[UIScreen mainScreen] bounds].size.width == 414)

#define CDV_IsIPhone6() ([[UIScreen mainScreen] bounds].size.height == 667 && [[UIScreen mainScreen] bounds].size.width == 375)

然后在我的 CDVSplashScreen.m 中我添加了更改:

if (CDV_IsIPhone5()) 
    imageName = [imageName stringByAppendingString:@"-568h"];

else if (CDV_IsIPad() && isOrientationLocked) 
    switch (orientation) 
        case UIInterfaceOrientationLandscapeLeft:
        case UIInterfaceOrientationLandscapeRight:
            imageName = [imageName stringByAppendingString:@"-Landscape"];
            break;

        case UIInterfaceOrientationPortrait:
        case UIInterfaceOrientationPortraitUpsideDown:
        default:
            imageName = [imageName stringByAppendingString:@"-Portrait"];
            break;
    

收件人:

if (CDV_IsIPhone5()) 
    imageName = [imageName stringByAppendingString:@"-568h"];

else if(CDV_IsIPhone6Plus())
    imageName = [imageName stringByAppendingString:@"-568h"];

else if(CDV_IsIPhone6())
    imageName = [imageName stringByAppendingString:@"-568h"];

 else if (CDV_IsIPad() && isOrientationLocked) 
    switch (orientation) 
        case UIInterfaceOrientationLandscapeLeft:
        case UIInterfaceOrientationLandscapeRight:
            imageName = [imageName stringByAppendingString:@"-Landscape"];
            break;

        case UIInterfaceOrientationPortrait:
        case UIInterfaceOrientationPortraitUpsideDown:
        default:
            imageName = [imageName stringByAppendingString:@"-Portrait"];
            break;
    

不确定为什么 568h 图像可以正常工作,但我尝试指定 736 和 667 图像,但没有成功。只需添加这两段代码,现在启动画面就可以在 iPhone 6+ 和 6 上正常工作。

不幸的是,此修复是针对每个项目的解决方案,因为它涉及编辑 Cordova 源文件。

【讨论】:

【参考方案3】:

我刚刚将启动画面插件版本 0.3.3 更新到 0.3.4,并且启动画面开始在 iphone 6 和 iphone 6+ 上正常工作。

【讨论】:

我在我的应用程序上执行了此操作,然后 iPad Mini 停止工作,而是显示默认启动屏幕。你们中有人遇到过同样的问题吗?【参考方案4】:

此错误的修复是在启动画面图像名称的末尾附加带有像素比率的后缀 - 例如“Default-667h.png”必须为“Default-667h@2x~iphone.png”。对于 iPhone 6+,pixelratio 为 3,因此必须将图像名称从“Default-736h.png”更改为“Default-736h@3x~iphone.png”。

【讨论】:

没有什么对我有用,解决这个问题真的很重要。添加、更改和重置启动画面、插件和平台。将科尔多瓦更新到 3.8.0,但没有任何效果。即使在一个全新的项目中,错误仍然会出现 在什么设备上 Android 或 iOS?在 iOS 中,必须通过 Xcode 进行更改 在 ios 上,我通过 xcode 更改了所有内容。并通过 xcode 部署。问题不在于启动画面本身。整个应用程序被放大。该应用程序在 iphone6 上以 568 像素的高度显示。【参考方案5】:

没有一个答案能解决我的问题 - 飞溅在 iPhone 6 和 6s 中仍然无法正常工作(而它在所有其他 iPhone 上都运行良好)。具体来说 - 更新插件,命名图像,检查捆绑资源 - 无济于事。删除和添加平台是我一直试图避免的事情,因为这意味着需要花费数小时的时间再次连接所有位 - 我试过了,即使这样也没有帮助。希望这篇文章可以为您节省所有时间:-)

唯一对我有用的解决方案是停止使用资产目录并在 APP-Info.plist 文件中定义启动画面。以下是说明:

    根据我使用 Cordova 的经验:始终备份整个项目文件夹。一个简单的复制/粘贴作为备份可以省去很多麻烦。所以从一个简单的备份开始 在 Xcode 中转到应用程序的目标屏幕,向下滚动到“应用程序图标和启动图像”部分。对于“启动图像源”,单击该字段并将其从启动图像更改为“不使用资产目录” 转到您的 app-Info.plist 并添加以下内容(这是原始文本。您也可以使用文本编辑器添加它):
<key>UILaunchImages</key>
  <array>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default</string>
          <key>UILaunchImageOrientation</key>
          <string>Portrait</string>
          <key>UILaunchImageSize</key>
          <string>320, 480</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default</string>
          <key>UILaunchImageOrientation</key>
          <string>Landscape</string>
          <key>UILaunchImageSize</key>
          <string>320, 480</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default-568h</string>
          <key>UILaunchImageOrientation</key>
          <string>Portrait</string>
          <key>UILaunchImageSize</key>
          <string>320, 568</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default-568h</string>
          <key>UILaunchImageOrientation</key>
          <string>Landscape</string>
          <key>UILaunchImageSize</key>
          <string>320, 568</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default-667h</string>
          <key>UILaunchImageOrientation</key>
          <string>Portrait</string>
          <key>UILaunchImageSize</key>
          <string>375, 667</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default-667h</string>
          <key>UILaunchImageOrientation</key>
          <string>Landscape</string>
          <key>UILaunchImageSize</key>
          <string>375, 667</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default-736h</string>
          <key>UILaunchImageOrientation</key>
          <string>Portrait</string>
          <key>UILaunchImageSize</key>
          <string>414, 736</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default-Landscape-736h</string>
          <key>UILaunchImageOrientation</key>
          <string>Landscape</string>
          <key>UILaunchImageSize</key>
          <string>414, 736</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default-Portrait</string>
          <key>UILaunchImageOrientation</key>
          <string>Portrait</string>
          <key>UILaunchImageSize</key>
          <string>768, 1024</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>8.0</string>
          <key>UILaunchImageName</key>
          <string>Default-Landscape</string>
          <key>UILaunchImageOrientation</key>
          <string>Landscape</string>
          <key>UILaunchImageSize</key>
          <string>768, 1024</string>
      </dict>
  </array>
    最后一步:确保您的 iPhone 图片命名为我使用的以下名称:

    默认-568h@2x~iphone.png 默认@2x~iphone.png 默认-667h@2x~iphone.png 默认~iphone.png 默认-736h@3x~iphone.png

在 Cordova 修复它之前,我希望这个答案可以为您节省大量时间 :-)

【讨论】:

【参考方案6】:

这个问题还有另一种可能性。

有时它不会自动创建对项目的 png 引用,所以即使你有 png,项目也不知道它。

所以,请检查您的构建阶段 > 复制捆绑资源

确保所有的 png 都在这个列表中,如果你错过了那里的东西,

将它们添加到“在构建阶段复制捆绑资源”,然后再次运行应用程序,您可能会看到不同。

【讨论】:

【参考方案7】:

确保您在您的 config.xml 中有类似下面的内容

&lt;preference name="SplashScreen" value="screen"/&gt;

【讨论】:

以上是关于PhoneGap 和 iPhone 6 Plus 闪屏问题的主要内容,如果未能解决你的问题,请参考以下文章

(工作)@media 查询 iPhone 6(phonegap)?

仍未针对 iPhone 6 和 iPhone 6 Plus 进行优化

iPhone 6 和 6 Plus 媒体查询

适用于 Iphone 6 和 Iphone 6 plus 的媒体 CSS

更新为 iPhone 5 制作的 XIB 以与 iPhone 6 和 iPhone 6 Plus 一起使用

iphone 6 和 6 plus 尺寸缩放