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

ver*_*age 7 background-image uitabbar ios 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];
}
Run Code Online (Sandbox Code Playgroud)

IS_IPHONE_5是一个宏定义为:

#define WIDTH_IPHONE_5 568
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds].size.height == WIDTH_IPHONE_5)
Run Code Online (Sandbox Code Playgroud)

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

肖像

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

景观

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

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

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

vac*_*ama 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版本.