iPhone 5启动画面显示不正确-Phonegap

21

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

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

模拟iPhone 5时:当应用程序启动时,它会显示正确的启动画面(Default-568h@2x.png)(以下简称“5”),但很快就会隐藏它,并显示iPhone 4的启动画面(以下简称“4”)。4并没有覆盖整个应用程序,因此显示了应用程序初始化的顶部和底部栏。

我不确定它是如何工作的,但我可以想到两种可能的情况: 1)两个图像同时显示,但由于某种原因,5会自动隐藏,而4则等待来自应用程序的调用才会隐藏。 2)在禁用手动隐藏启动画面的某个时刻,PhoneGap将“真正”的启动画面替换为一个“假”的启动画面,该启动画面一直显示,直到从应用程序进行JavaScript调用,PhoneGap可能在此切换后不会正确显示正确的启动画面。

有其他人遇到过这个问题或解决过吗?

更新: 尝试删除并重新添加所有启动图片,但无济于事。我尝试删除较小的图片(4及其非Retina版本),但即使在项目中没有任何较小的图片,我仍然会遇到相同的错误!

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

因此,推荐的解决方案是将您的应用程序更新为使用Cordova 2.2.0,如果出于某种原因无法这样做,则提供以下解决方案。


2
你在 XCode 项目中更改了“启动图像”吗?你手动粘贴了闪屏图片(在“your_project”->“资源”->“闪屏”中)吗? - Littm
是的!尝试删除并重新添加所有启动图像,但无济于事。 - Hessius
我认为这实际上是 Cordova/PhoneGap 中的一个 bug -- 它似乎手动重新加载启动画面图像,而当不在 iPad 上时,默认加载“Default”图像(经典大小的启动画面)。需要更新以检查屏幕尺寸吧... - Brion
我已经在https://issues.apache.org/jira/browse/CB-1482为Cordova/PhoneGap提交了一个错误报告。 - Brion
3个回答

19

我在其他地方得到了两个答案,但还没有时间测试它们:

用户T123在Phonegap Google组中的回答:

打开CDVViewController.m文件 -- 找到 - (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的解决方案,对我有效! 编辑2:Brion的修复已经被纳入了Cordova 2.2.0,该版本已经发布!

编辑3:更新一下评论,供那些不想阅读的人参考:

对于Phonegap版本1.4.1,我设法让Hessius的修复方法按如下方式工作:我从文件PGViewController.m中复制了方法showSplashScreen、isIPad、resolveImageResource和定义#define degreesToRadian(x) (M_PI * (x) / 180.0)到我的MainViewController.m文件中。之后,XCode抱怨我正在将值分配给只读属性,所以我编辑了PhoneGap.framework中的头文件,使这两个属性变为可读写。我还将Hessius代码中的launchImageFile更改为@"Default"。这对我起作用了。- Joe Dyndale Oct 8 '12 at 15:23


1
你正在使用 Cordova 2.0 吗? 如果你展开这个项目,你会看到“CordovaLib.xcodeproj”作为一个子项目。在“Classes”文件夹中,你会发现一个名为“Cleaver”的子文件夹,在其中你将找到之前提到的 CDVViewController.m 文件 - 在这里进行更改,保存并完成! - Hessius
1
对于Phonegap版本1.4.1,我成功地使用了Hessius的修复方法:我将PGViewController.m文件中的showSplashScreenisIPadresolveImageResource方法和#define degreesToRadian(x) (M_PI * (x) / 180.0)定义复制到了我的MainViewController.m文件中。之后,XCode抱怨我正在给只读属性赋值,所以我编辑了PhoneGap.framework的头文件,将这两个属性改为了readwrite。我还将Hessius代码中的launchImageFile更改为@"Default"。这对我很有帮助。 - Joe Dyndale
非常感谢!Joe Dyndale,这解决了我的cordova 1.7.0问题.. :) - Tejas
@JoeDyndale,把你的答案加到我的底部可以吗?当然要标明出处归属于你。这样那些不看评论的人也不会错过了。 - Hessius
当然,尽管说... :) - Joe Dyndale
显示剩余5条评论

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];   
}   

这将禁用showSplashScreen,以避免PhoneGap添加的较短启动图像(iOS初始启动图像正常显示)在iPhone5上显示。对我来说很有效,而且通过关闭iPhone5的showSplashScreen几乎没有注意到任何差异。


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";
 //        }
}

将我已经注释掉(或删除)的代码重新注释掉,消除了应用程序加载和启动屏幕之间出现的白色闪烁。

希望这能帮助到某些人!


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