2014-10-09 84 views
11

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

在我的PhoneGap应用程序中,我在Xcode中为闪屏添加了一个新的资源库,我添加了两个新图像,一个用于iPhone 6肖像,一个用于iPhone 6 Plus肖像。

他们的工作和应用程序现在不能缩放,因为它没有这些图像。

问题是,在iPhone 6 Plus应用程序加载时,初始屏幕最初显示正常,但在一秒钟或两秒钟内,它会更改大小并显示在屏幕上,就像屏幕更改其大小,现在一半的标志是不在屏幕上,有其他人看到这一点,并知道如何解决它?该图像是苹果公司规定的正确尺寸,所以不知道为什么它在中等应用程序加载时的尺寸发生变化。

+0

您是否使用'xcode6'和'科尔多瓦3.6.3'? – 2014-10-09 16:28:08

+0

使用Xcode 6.1和PhoneGap 3.5 – 2014-10-09 16:29:38

+0

您需要为iOS8使用'cordova 3.6.3' – 2014-10-09 16:30:36

回答

7

我遇到了同样的问题,我缩小到了splashscreen插件(org.apache.cordova.splashscreen)。下面是解决问题的两个iPhone 6 & iPhone 6+需要我的步骤:

  1. 更新到溅射屏幕插件的最新版本(已修补在GitHub上):
    • cordova plugin remove org.apache.cordova.splashscreen
    • cordova plugin add https://github.com/apache/cordova-plugin-splashscreen.git
  2. 重新创建通过科尔多瓦整个iOS平台:
    • cordova platform remove ios
    • cordova platform add ios
    • cordova build ios
  3. 确保您的iPhone 6 & iPhone 6+闪屏图像被分别命名为[email protected]~iphone.png和​​。然后,在Xcode中,将项目目标下的两个图像文件拖到Resources/splash的项目导航器(默认情况下,屏幕左侧的窗格)中。

看来,闪屏插件创建一个假的启动画面应该非常完美地匹配真实的iOS启动画面,当你打电话splashscreen.hide(),你实际上隐藏假启动画面。就iPhone6/6 +而言,假冒的飞溅屏幕与您目前使用cordova plugin add org.apache.cordova.splashscreen获得的插件版本是错误的,而且一旦隐藏真实的飞溅屏幕,您会看到图像更改大小并移出屏幕。

+2

这个答案很好,但我有一件事要补充:我发现为iPhone 6/6 +启动画面命名文件Default-667h.png和Default-736h.png也可以使用(在Cordova 3.7.0+中) 。 – 2014-11-02 15:36:17

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 I加入改变:

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上正常工作。

不幸的是,此修复程序是每个项目解决方案,因为它涉及编辑科尔多瓦源文件。

2

我刚刚将我的splashscreen插件版本0.3.3更新至0.3.4,并且splashscreen开始为iphone 6和iphone 6+正常工作。

+1

我第二。只是做了同样的事情,现在它正在工作。 – rafaelbiten 2014-12-11 17:52:47

+0

我在我的应用程序上做了这个,然后iPad Mini停止工作,代之以显示默认启动画面。你们有没有遇到同样的问题? – 2015-03-31 22:36:10

2

此bug的修复方法是在splashscreen图像名称的末尾添加带有pixelratio的后缀,例如'Default-667h.png'必须是'[email protected]~iphone.png'。对于iPhone 6+ pixelratio为3,因此图像名称必须从“Default-736h.png”更改为“[email protected]~iphone.png”。

+0

没有什么适合我的,解决这个问题真的很重要。添加,更改和重新设置splashscreens,插件和平台。更新了cordova到3.8.0,但没有任何效果。即使在全新的项目中,该错误仍然会出现 – 2015-05-18 20:26:12

+0

Android或iOS上的设备?在iOS中,必须通过iOS上的Xcode – 2015-05-19 10:12:28

+0

进行更改,然后更改所有槽xcode。并通过xcode进行部署。问题不在于启动画面本身。整个应用程序得到扩大。该应用在iphone6上以568px的高度显示。 – 2015-05-19 12:37:10

0

还有另外一个关于这个问题的概率。

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

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

确保所有png格式,你有这样的名单上,如果你错过的东西在那里,

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

enter image description here

1

的答案都不解决了这个问题对我来说 - 闪仍然没有在iPhone 6 & 6S(虽然它的工作以及所有其他的iPhone)正常工作。特别是 - 更新插件,命名图像,检查Bundle资源 - 没有帮助。删除和添加平台是我一直试图避免的,因为它意味着再次连接所有位的几个小时的工作 - 我尝试过,甚至没有帮助。希望这篇文章能够节省您所有的时间:-)

我唯一的解决方案是停止使用资产目录并定义APP-Info.plist文件中的splash。这里是说明:

  1. 从我的经验与科尔多瓦:总是备份整个项目文件夹。一个简单的复制/粘贴作为备份可以节省很多麻烦。所以,从一个简单的备份开始
  2. 在Xcode转到您的应用程序的目标屏幕,向下滚动到“应用程序图标和启动图像”部分。对于“启动图像源”,单击该字段并将其从启动图像更改为“不要使用资产目录”
  3. 转到您的应用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图片被命名为我所用的名称如下:

    [email protected]~iphone.png
    [email protected]~iphone.png
    [email protected]~iphone.png
    默认〜iphone.png
    [email protected]~iphone.png

  • 直到科尔多瓦解决它,我希望这个答案会为你节省很多的时间:-)

    0

    确保您有类似下面你config.xml中

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

    相关问题