在iPhone 5上更改方向后,UINavigationBar的背景图像尺寸不正确

时间:2012-10-09 21:13:47

标签: ios background-image uitabbar iphone-5

希望小问题的长标题。

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

以下是我的自定义导航控制器的init-method中的相关代码段:

[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)

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

portrait

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

landscape

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

  • navbar-bg-landscape.png:480x44
  • navbar-bg-landscape@2x.png:960x88
  • navbar-bg-landscape-iphone5.png:1136x88

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

1 个答案:

答案 0 :(得分: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版本。