【发布时间】:2012-10-09 21:13:46
【问题描述】:
希望有个小问题的长标题。
我有一个带有自定义背景图像的 UINavigationBar。我的应用程序将支持横向和纵向。风景在视网膜 3 英寸和非视网膜屏幕的模拟器中运行良好。但是,在视网膜 4 英寸屏幕上,背景图像在横向模式下显示为两倍大小。
这是我的自定义导航控制器的 init-method 中的相关代码 sn-p:
[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 高)为:
- navbar-bg-landscape.png:480x44
- navbar-bg-landscape@2x.png: 960x88
- navbar-bg-landscape-iphone5.png: 1136x88
或者它可能是一个模拟器唯一的问题? (我现在没有真正的 iPhone 5)
【问题讨论】:
-
为什么不使用
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode方法为iphone/ipone5/ipad 使用一张图片? -
因为我不知道它存在 :) 看起来很有希望,可能适用于我的情况。在我看来,这种方法只有在调整大小不会扭曲图像时才有用......
标签: ios background-image uitabbar iphone-5