UINavigationBar 背景——如何覆盖所有尺寸、分辨率和设备?

UINavigationBar background - how to cover all sizes, resolutions and devices?

我有以下代码可以很好地设置背景图片:

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed: @"navbar_bg.png"] forBarMetrics:UIBarMetricsDefault];

我的问题是,对于 Xcode6、iOS8/9、iPhone 5、6、6+、iPad 等,我如何确保覆盖所有设备、宽度和分辨率,以确保我的背景图像始终正确填充导航栏?

我在 SO 和其他各种网站上看到过其他问题,但都已经有 2-4 年的历史了,所以不要提及或涵盖最新的设备宽度和分辨率。

我想在导航栏中使用背景图片,但我需要确保它在所有可能的设备上看起来都不错。

您所要做的就是在您的资产目录中拥有图像的三个版本。第一个尺寸需要第二个尺寸的两倍,第三个尺寸的三倍。 Xcode 会将正确的图像放在正确的设备上。

或者您可以只放置一个矢量图像,在编译时 Xcode 会为您即时生成三张图像。

对于导航栏,您需要单独的纵向和横向图像。你可以这样写:

UIImage *portraitImage = [UIImage imageNamed:@"test_bar_portrait.png"];
UIImage *landscapeImage = [UIImage imageNamed:@"test_bar_landscape.png"];
[[UINavigationBar appearance] setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:landscapeImage forBarMetrics:UIBarMetricsLandscapePhone];
self.navigationController.navigationBar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;