【问题标题】:Background image of UINavigationBar doesn't size correctly after orientation change on iPhone 5在 iPhone 5 上更改方向后 UINavigationBar 的背景图像大小不正确
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 是的!我知道这是我忽略的小事。先生,您是英雄;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多