iOS 8导航栏背景图像

时间:2014-09-26 05:10:42

标签: ios uinavigationbar ios8 background-image

对于iOS 8,只有iPhone和iPad尺寸以及纵向和横向的概念已经改变,因此设置导航栏背景图像的工作方式并不相同。目前我正在使用以下代码:

UIImage *NavigationPortraitBackground = [[UIImage imageNamed:@"nav-image-portrait"]
                                         resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

UIImage *NavigationLandscapeBackground = [[UIImage imageNamed:@"nav-image-landscape"]
                                          resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

[[UINavigationBar appearance] setBackgroundImage:NavigationPortraitBackground forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:NavigationLandscapeBackground forBarMetrics:UIBarMetricsCompact];

自iOS 8起,条形码指标部分已被弃用。启动我的应用程序时,只需在iPhone 6或6 Plus上水平重复条形图像。我已经查看了图像切片,但我也不认为这是解决方案。

portrait landscape

3 个答案:

答案 0 :(得分:73)

我找到了解决方案。我需要使用方法resizableImageWithCapInsets:resizingMode:并将resizingMode设置为UIImageResizingModeStretch,否则图像仍会在导航栏中平铺。

<强>目标-C:

[[UIImage imageNamed:@"nav-image-portrait"]
                                         resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch];

Swift 3/4:

UINavigationBar.appearance().setBackgroundImage(UIImage(named: "image")!.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch), for: .default)

答案 1 :(得分:4)

[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"navbarimg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault];

使用上面的代码。它使用小尺寸图像(40*navigarbarheight) 40是图像的宽度

答案 2 :(得分:0)

这是一个更准确,更精确的示例代码,适合所有屏幕尺寸。它会有所帮助

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"header"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, screenWidth-50, 50)] forBarMetrics:UIBarMetricsDefault];