8

希望是一个小问题的长标题。

我有一个带有自定义背景图像的 UINavigationBar。我的应用程序将支持横向和纵向。风景在视网膜 3 英寸和非视网膜屏幕的模拟器中运行良好。但是,在视网膜 4 英寸屏幕上,背景图像在横向模式下显示为两倍大小。

这是我的自定义导航控制器的 init 方法中的相关代码片段:

[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-bg.png"] forBarMetrics:UIBarMetricsDefault];        
if (IS_IPHONE_5)
{
    [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-bg-landscape-iphone5.png"] forBarMetrics:UIBarMetricsLandscapePhone];
}
else
{
    [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-bg-landscape.png"] forBarMetrics:UIBarMetricsLandscapePhone];
}

IS_IPHONE_5 是一个宏定义为:

#define WIDTH_IPHONE_5 568
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds].size.height == WIDTH_IPHONE_5)

这里有 2 个屏幕片段,可以更清楚地解释事情。当应用程序以纵向模式打开时,一切都很好:

肖像

更改为横向模式时全部爆炸:

景观

背景图像的横向版本的图像尺寸(以像素为单位,宽 x 高)为:

  • 导航栏-bg-landscape.png:480x44
  • 导航栏-bg-landscape@2x.png: 960x88
  • 导航栏-bg-风景-iphone5.png:1136x88

或者它可能是一个模拟器唯一的问题?(我现在没有真正的 iPhone 5)

4

1 回答 1

7

我相信您navbar-bg-landscape-iphone5.png实际上应该被调用navbar-bg-landscape-iphone5@2x.png,并且您应该继续navbar-bg-landscape-iphone5.png在代码中引用它。因为 iPhone 5 有视网膜显示屏,iOS 会寻找@2x版本并使用它。如果找不到,它将使用您提到的版本,然后将其放大 2 倍。为了避免 iOS 的 2 倍放大,给它一个@2x版本。

于 2012-10-09T21:58:11.237 回答