如何在不同的iOS设备上为UINavigationBar设置背景图片

我想在UINavigationBar上设置完整的图像,为此我有:

 @2x image (640 x 128) @3x image (960 x 192) 

下面的截图是问题:

在这里输入图像说明

请参考这个黄色的大纲。 这部分正在切割。

我已经写了这个代码来添加图像:

  override func viewDidLoad() { super.viewDidLoad() self.navigationController?.navigationBar.setBackgroundImage(UIImage(named:"nav-bar-b"),for: .any, barMetrics: .default) } 

请帮我提供一个更好的解决scheme。

我已经解决了这个问题:

以设备大小为导航图像库,否则破坏导航图像。

iPhone 6P => // 1242×191像素
iPhone 6 => // 750×128像素
iPhone 5 => // 640×128像素

 func SetNavigationImage() { var navBackgroundImage:UIImage! if IS_IPHONE_6P { navBackgroundImage = UIImage(named: "nav-bar-b_1242×191") //1242 × 191 pixels }else if IS_IPHONE_6 { navBackgroundImage = UIImage(named: "nav-bar-b_750×128")//750 × 128 pixels } else { navBackgroundImage = UIImage(named: "nav-bar-b_640×128")//640 × 128 pixels } UITabBar.appearance().layer.borderWidth = 0.0 UITabBar.appearance().clipsToBounds = true UINavigationBar.appearance().isTranslucent = false UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent UINavigationBar.appearance().setBackgroundImage(navBackgroundImage, for:.default) UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().tintColor = .white } 

 var IS_IPHONE_4_OR_LESS = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0 var IS_IPHONE_5 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0 var IS_IPHONE_6 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0 var IS_IPHONE_6P = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0 

在viewDidLoad中试试这个代码

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

1.self.navigationController.navigationBar.setBackgroundImage(image,forBarMetrics:.Default)

2.导航栏的高度由44点(88像素)变为64点(128像素)。

创build一个可resize的图像。 因此,图像将垂直和水平缩放以适应包括状态栏的导航栏。

对于Swift 3:

 if let image = UIImage(named: "imagefile") { let backgroundImage = image.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch) self.navigationController?.navigationBar.setBackgroundImage(backgroundImage, for: .default) } 

要么

 if let image = UIImage(named: "imagefile") { let backgroundImage = image.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch) UINavigationBar.appearance().setBackgroundImage(backgroundImage, for: .default) }