0

配置文件

#define IS_IPHONE5  [[UIScreen mainScreen] bounds].size.height == 568

主视图控制器.m

- ( void ) phoneType{

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        CGSize result = [[UIScreen mainScreen] bounds].size;
        if(result.height == 568){
            NSLog(@"iPhone 5");
            homeImg.image = [UIImage imageNamed:@"Background-Home.fw.png"];
            loginImg.image=[UIImage imageNamed:@"Background.fw.png"];
        }
        else{
            NSLog(@"iPhone 4S");
            homeImg.image = [UIImage imageNamed:@"Background-Home.png"];
            loginImg.image=[UIImage imageNamed:@"Background.png"];            
        }
    }

这就是 iphone 4s 和 5 我发现差异的方式。当我在 iphone 5 上执行此代码时记录 iphone 4s 打印。如何更改我的代码以正确执行

4

3 回答 3

1

这仅在您至少向Default-568h@2x.png应用程序中添加了启动图像时才有效。否则,这将始终返回 false。(因为如果您没有启动图像,屏幕将被黑框化)

此外,您可能希望将 iPhone 5 检查更改为

bool isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom] 
== UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height * 
[[UIScreen mainScreen] scale]) >= 1136));

由于 == 和 != 的浮点问题

于 2013-03-05T14:19:08.013 回答
1

你可以试试这个:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}
于 2013-03-05T14:16:28.210 回答
0

C 中数学的终极规则:永远不要使用==!=处理浮点数。它们不像你期望的那样工作。与其检查它是否为特定值,不如检查它是否小于或大于中间值:

IS_IPHONE5 ([[UIScreen mainScreen] bounds].size.height > 500)

此外,建议始终将宏括起来。

于 2013-03-05T14:17:42.083 回答