PhoneGap和iPhone 6 Plus闪屏问题

时间:2014-10-09 16:22:54

标签: cordova ios8

好的,所以在更新我的iOS 8应用程序和更大的iPhone时,我注意到一个问题,我无法弄清楚如何解决。

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

他们工作,应用程序现在没有像没有这些图像那样扩展。

问题是,在iPhone 6 Plus加载应用程序时,启动画面最初显示正常,但在一两秒内它会改变大小并显示在屏幕外,就像屏幕改变其大小而现在一半徽标在屏幕外,还有其他人看过这个并知道如何修复它吗?图像的大小与Apple规定的大小一致,因此不确定为什么在应用程序加载过程中它的大小会发生变化。

7 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,我缩小到了flashscreen插件(org.apache.cordova.splashscreen)。以下是我在iPhone 6和iPhone上解决问题所需的步骤。 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(默认情况下,在屏幕左侧的窗格中)。
  4. 看起来,启动画面插件会创建一个假的启动画面,理想情况下应该与真正的iOS启动画面完美匹配,当您调用splashscreen.hide()时,实际上是在隐藏虚假启动画面。只是,就iPhone 6/6 +而言,假冒闪屏与你目前使用cordova plugin add org.apache.cordova.splashscreen获得的插件版本有误,并且你会看到图像改变大小并在真正的启动画面显示后离开屏幕隐藏。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

我刚刚将我的splashscreen插件版本0.3.3更新为0.3.4,并且启动画面开始正常工作,适用于iphone 6和iphone 6+。

答案 3 :(得分:2)

此错误的修复是在splashscreen图像名称末尾附加pixeltitio后缀 - 例如'Default-667h.png'必须为'Default-667h@2x~iphone.png'。对于iPhone 6+,pixelratio为3,因此图像名称必须从“Default-736h.png”更改为“Default-736h@3x~iphone.png”。

答案 4 :(得分:1)

没有一个答案能解决我的问题 - 在iPhone 6和iPhone中,闪光仍无法正常工作6s(虽然它适用于所有其他iPhone)。具体来说 - 更新插件,命名图像,检查Bundle Resources - 没有帮助。删除和添加平台是我总是试图避免的,因为它意味着再次连接所有位的工作时间 - 我尝试了,甚至这没有帮助。希望这篇文章能为你节省一切:-)

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

  1. 根据我对Cordova的经验:始终备份整个项目文件夹。简单的复制/粘贴作为备份可以节省很多麻烦。所以从简单的备份开始
  2. 在Xcode中转到应用程序的目标屏幕,向下滚动到"应用程序图标和启动图像"部分。对于"启动图像源"点击该字段并将其从启动图像更改为"不要使用资产目录"
  3. 转到您的app-Info.plist并添加以下内容(这是原始文本。您还可以使用文本编辑器添加它):
  4. <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
        默认〜iphone.png
        Default-736h@3x~iphone.png

    2. 直到Cordova修复它,我希望这个答案能为你节省很多时间: - )

答案 5 :(得分:0)

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

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

所以,检查你的Build Phases&gt;复制捆绑资源

确保您在此列表中拥有所有png,如果您遗漏了某些内容,

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

enter image description here

答案 6 :(得分:0)

确保您 在config.xml中包含以下内容

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