21

我正在更新我的 PhoneGap iOS 应用程序以使其与 iPhone 5 兼容。

我的应用程序初始化后,我手动隐藏了启动画面。

模拟 iPhone 5 时:当应用程序启动时,它会显示正确的初始屏幕 (Default-568h@2x.png)(此处为“5”),但很快将其隐藏,而是显示 iPhone 4 初始屏幕(此处为“4”) . 4 没有覆盖整个应用程序,因此显示了应用程序初始化的顶部和底部栏。

我不完全确定它是如何工作的,但我可以想到两种可能的情况:1)两个图像同时显示,但由于某种原因,5 自动隐藏,而 4 等待来自应用程序的调用隐藏。2)在某些时候,当禁用手动隐藏启动画面时,phonegap 会切换“真实”启动画面以显示“假”启动画面,直到来自应用程序的 javascript 调用和 phonegap 在此切换后可能无法显示正确的启动画面。

有没有其他人遇到和/或解决过这个问题?

更新:尝试再次删除和添加所有启动图像,但无济于事。我尝试删除较小的图像(4 及其非视网膜版本),但即使项目中没有较小的图像,我也会得到相同的错误!

更新 2:Cordova 2.2.0 现已发布,因此根据以下内容解决了此问题:http ://shazronatadobe.wordpress.com/2012/10/27/whats-new-in-cordova-ios-2-2-0 /

因此,推荐的解决方案是更新您的应用程序以使用 Cordova 2.2.0,如果由于某种原因无法做到这一点,下面提供了解决方案。

4

3 回答 3

19

我在其他地方收到了两个答案,但还没有时间测试它们: 来自 Phonegap Google 组中的用户 T123:打开 CDVViewController.m -- find - (void) showSplashScreen

换行:690

从 :

else // not iPad

{

    orientedLaunchImageFile = launchImageFile;

}

至:

else // not iPad

{

    orientedLaunchImageFile = launchImageFile;

    /* Edited for 4-inch IP5 */

    if(screenBounds.size.height == 568)

        orientedLaunchImageFile = [NSString stringWithFormat:@"%@-568h", launchImageFile];

}

来自上面评论的 Brion,以下拉取请求,希望被纳入 Cordova 2.2.0:https ://github.com/apache/incubator-cordova-ios/pull/50

编辑:尝试了 T123 的解决方案,它对我有用!EDIT2:Brion 的修复程序被合并到现在已经发布的 Cordova 2.2.0 中!

EDIT3:只是更新以突出那些不费心阅读它们的人的评论:

对于 Phonegap 版本 1.4.1,我设法让 Hessius 的修复程序像这样工作:我从文件 PGViewController 复制了方法 showSplashScreen、isIPad、resolveImageResource 和定义#define degreeToRadian(x) (M_PI * (x) / 180.0)。 m 到我的 MainViewController.m 文件。之后,XCode 抱怨我正在为只读属性赋值,所以我编辑了 PhoneGap.framework 中的头文件,以使这两个属性可读写。我还将 Hessius 的代码中的 launchImageFile 更改为 @"Default"。这对我有用。– 乔·丁代尔 2012 年 10 月 8 日 15:23

于 2012-09-18T20:54:01.967 回答
1

对此的修复(https://issues.apache.org/jira/browse/CB-1482)直到 2.2 才发布。使用不稳定的版本风险很大,我懒得自己从源代码编译,所以我尝试了以下 hack:

在 MainViewController.m

- (void) showSplashScreen   
{   
    CGRect screenBounds = [[UIScreen mainScreen] bounds];   
    // HACK: PhoneGap pre-2.2 does not support iphone5 splash image well, so we just skip it    
    if (screenBounds.size.height == 568) {  
        return; 
    }   
    [super showSplashScreen];   
}   

这将禁用 iPhone5 的 showSplashScreen 以避免 PhoneGap 添加的较短启动图像(iOS 初始启动图像显示正常)。它对我有用,我几乎没有注意到 iPhone5 的 showSplashScreen 有什么不同。

于 2012-10-04T19:27:28.490 回答
0

白色闪烁

我在使用 Cordova 2.2 时遇到了同样的问题。我认为值得一提的是,我必须采取额外的步骤才能使启动画面正确呈现。

我进行了@Hessius 答案中包含的更改。但我注意到在闪屏出现后产生了白屏闪烁。

在 (void)showSplashScreen 方法中,其他人可能会看到

if (launchImageFile == nil) { // fallback if no launch image was specified
 //        if (CDV_IsIPhone5()) {
 //            // iPhone 5 or iPod Touch 6th-gen
 //            launchImageFile = @"Default-568h";
 //        } else {
        launchImageFile = @"Default";
 //        }
}

将我评论的代码注释掉(或删除),消除了我在应用程序加载和启动屏幕之间看到的白色闪烁。

希望这对某人有帮助!

于 2013-08-16T16:48:01.930 回答