¿Cómo cambiar el color del borde inferior de UINavigationBar?

Leí muchos hilos, pero ninguno resolvió esta pregunta en una respuesta clara y consistente para la última versión de Swift.

Por ejemplo, la respuesta principal de esta pregunta sugiere UINavigationBar.appearance().setShadowImage() . Sin embargo, dicho método no existe en la última versión de swift.

No quiero ocultar el borde inferior. Solo quiero cambiar el color .

Además, sería genial poder cambiar la altura, pero sé que estoy preguntando demasiado en una pregunta.

Editar: Creé una image de 2×1 píxeles y la configuré en shadowImage, pero el borde permanece sin cambios:

 UINavigationBar.appearance().barTintColor = UIColor.whiteColor() UINavigationBar.appearance().shadowImage = UIImage(named: "border.jpg") //in my AppDelegate, for global appearance 

Aquí está la image; es muy pequeño: imagen de borde

SWIFT 2.x:

Por conveniencia, he extendido UIImage() para permitirme esencialmente utilizarlo como un color con el código inmediatamente inferior.

 extension UIImage { class func imageWithColor(color: UIColor) -> UIImage { let rect = CGRectMake(0, 0, 1.0, 0.5) UIGraphicsBeginImageContextWithOptions(rect.size, false, 0) color.setFill() UIRectFill(rect) let image: UIImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } } 

A continuación, querrá agregar las siguientes líneas a su código para ajustar la image sombreada de UINavigationBar de UINavigationBar , o el color en esta instancia.

 // Sets Bar's Background Image (Color) // self.navigationController?.navigationBar.setBackgroundImage(UIImage.imageWithColor(UIColor.blueColor()), forBarMetrics: .Default) // Sets Bar's Shadow Image (Color) // self.navigationController?.navigationBar.shadowImage = UIImage.imageWithColor(UIColor.networkingColor()) 

SWIFT 3.x:

Código de extensión:

 extension UIImage { class func imageWithColor(color: UIColor) -> UIImage { let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 0.5) UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0) color.setFill() UIRectFill(rect) let image : UIImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return image } } 

Código de barra de navigation:

 // Sets Bar's Background Image (Color) // navigationController?.navigationBar.setBackgroundImage(UIImage.imageWithColor(color: .blue), for: .default) // Sets Bar's Shadow Image (Color) // navigationController?.navigationBar.shadowImage = UIImage.imageWithColor(color: .networking) 

Editar 1:

Código de extensión actualizado para que pueda ajustar el tamaño rectal sin cambiar la opacidad del color UIImage .

Editar 2:

Se agregó el código Swift 3.

Los methods antiguos de establecimiento de UIKit como UISomeClass.setSomething(whatIWantToSet) se han reformulado para que pueda establecerlos directamente con un signo = . Entonces, en mi ejemplo, tendría que usar UISomeClass.something = whatIWantToSet .

En su caso, es UINavigationBar.appearance().shadowImage = whatYouWantToSet .