对于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上水平重复条形图像。我已经查看了图像切片,但我也不认为这是解决方案。
答案 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];