PhoneGap和iPhone 6 Plus启动画面问题

12

好的,当我在更新我的iOS 8应用程序并适配更大的iPhone时,我发现了一个问题,但是我无法解决。

在我的PhoneGap应用程序中,我在Xcode中添加了一个新的资源库用于启动画面,我添加了两个新的图片,一个用于iPhone 6纵向屏幕,另一个用于iPhone 6 Plus纵向屏幕。

它们可以正常工作,现在该应用程序不会再像没有这些图片时那样进行缩放。

问题是,在iPhone 6 Plus上,当应用程序加载时,启动画面最初显示正常,但是在一两秒钟内,它的大小就会改变,并且显示在屏幕外面,就像屏幕的大小发生了变化,现在标志的一半超出了屏幕范围。是否有其他人遇到过这个问题并知道如何解决?该图像的大小由Apple规定的是正确的,所以不确定为什么在应用程序加载过程中会改变大小。


你正在使用 xcode6cordova 3.6.3 吗? - Dawson Loudon
使用Xcode 6.1和PhoneGap 3.5。 - Jason Storey
你需要在iOS8上使用cordova 3.6.3 - Dawson Loudon
从PhoneGap转换到使用Cordova会有任何变化吗?我知道它们基本上是一样的,但目前我正在使用PhoneGap,我只需要安装cordova然后在我的项目文件夹上运行更新命令吗? - Jason Storey
将我的项目升级到 Cordova 3.6.3 并没有解决问题,启动画面仍然被调整大小并拉伸到屏幕边缘之外。 - Jason Storey
7个回答

7
我遇到了同样的问题,经过排查,发现是splashscreen插件(org.apache.cordova.splashscreen)引起的。以下是我解决iPhone 6和iPhone 6+问题所需的步骤:
  1. 更新最新版本的splashscreen插件(已在GitHub上进行了修补):
    • cordova plugin remove org.apache.cordova.splashscreen
    • cordova plugin add https://github.com/apache/cordova-plugin-splashscreen.git
  2. 通过cordova重新创建整个iOS平台:
    • cordova platform remove ios
    • cordova platform add ios
    • cordova build ios
  3. 确保你的iPhone 6和iPhone 6+启动画面图片分别命名为Default-667h@2x~iphone.pngDefault-736h@3x~iphone.png。然后,在Xcode中,将这两个图像文件拖到工程目标下的Resources/splash中(默认情况下,在屏幕左侧的Project Navigator窗格中)。
看起来,splashscreen插件创建了一个虚假的启动画面,理论上应该完全匹配真实的iOS启动画面,当你调用splashscreen.hide()时,实际上是隐藏了虚假的启动画面。只是,在iPhone 6/6+的情况下,插件版本错误,你会看到图像大小改变并移动到屏幕外,一旦真正的启动画面被隐藏。

2
这个答案很好,但我有一点要补充:我发现在 Cordova 3.7.0+ 中,将文件命名为 Default-667h.png 和 Default-736h.png 也适用于 iPhone 6/6+ 的启动画面。 - Jake Chasan

3
因为我们的项目设置比较复杂,我无法删除和添加 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;
    }
}

To:

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源文件。


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

什么都对我没用,真的非常重要要解决这个问题。添加、更改和重置了启动画面、插件和平台。将 Cordova 更新到 3.8.0,但仍然没有任何作用。即使在全新的项目中,这个错误仍然出现。 - Dominik Feininger
在哪个设备上,Android 还是 iOS?在 iOS 上,更改必须通过 Xcode 进行。 - Victor Simeonov
在iOS上,我通过Xcode进行所有更改。并通过Xcode部署。问题不在于启动画面本身。整个应用程序被放大了。该应用程序在iPhone6上以568px的高度显示。 - Dominik Feininger

2

我刚刚将我的启动画面插件版本从0.3.3更新到0.3.4,现在iPhone 6和iPhone 6+的启动画面可以正常工作了。


我在我的应用程序上做了这个操作,然后iPad Mini就停止工作了,只显示默认的启动画面。你们有没有遇到过同样的问题? - Carlos Garcia

1

对我来说,没有一个答案能够解决我的问题 - 在 iPhone 6 & 6s 中闪屏仍然无法正常工作(而在所有其他 iPhone 上都可以正常工作)。具体来说 - 更新插件、命名图像、检查 Bundle 资源 - 都没有帮助。删除和添加平台是我总是尽量避免的事情,因为这意味着要花费数小时的时间重新连接所有部分 - 我尝试了它,甚至这也没有帮助。希望这篇文章能够为您节省这些时间 :-)

唯一有效的解决方案是停止使用资源目录并在 APP-Info.plist 文件中定义闪屏。以下是说明:

  1. 根据我的 Cordova 经验:始终备份整个项目文件夹。简单的复制/粘贴备份可以避免很多麻烦。所以从备份开始。
  2. 在 Xcode 中转到您的应用程序的目标屏幕,向下滚动到“应用程序图标和启动图像”部分。对于“启动图像源”,单击该字段并将其从启动图像更改为“不使用资源目录”
  3. 转到您的 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>
  1. 最后一步:确保你的iPhone图片被命名为以下名称:

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

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


0

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

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

因此,请检查您的Build Phases > Copy Bundle Resources

确保所有的png都在这个列表中,如果您漏掉了某些内容,请将它们添加到“Build Phases”中的“Copy Bundle Resources”,然后再次运行应用程序,您可能会看到不同之处。

enter image description here


0

请确保您的config.xml文件中没有以下代码:

<preference name="SplashScreen" value="screen"/>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接