如何在不同的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) }