希望小问题的长标题。
我有一个带有自定义背景图片的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)
这里有两个可以更清楚地解释事物的屏幕碎片。当应用程序以纵向模式打开时,一切都很好:
更改为横向模式时全部爆炸:
背景图像的横向版本的图像尺寸(以像素为单位,宽度x高度)为:
或者它可能只是一个模拟器问题? (我现在没有真正的iPhone 5)
答案 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
版本。