SWIFT 2.x:
For convenience, I extended UIImage() to allow me to essentially use it as a color with the code below.
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 } }
Then you need to add the following lines to your code to customize the shadow image of the viewController UINavigationBar or the color in this instance.
// Sets Bar Background Image (Color) // self.navigationController?.navigationBar.setBackgroundImage(UIImage.imageWithColor(UIColor.blueColor()), forBarMetrics: .Default) // Sets Bar Shadow Image (Color) // self.navigationController?.navigationBar.shadowImage = UIImage.imageWithColor(UIColor.redColor())
SWIFT 3.x / 4.x:
Extension Code:
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 } }
NavigationBar Code:
// Sets Bar Background Image (Color) // navigationController?.navigationBar.setBackgroundImage(UIImage.imageWithColor(color: .blue), for: .default) // Sets Bar Shadow Image (Color) // navigationController?.navigationBar.shadowImage = UIImage.imageWithColor(color: .red)
Change 1:
Updated extension code so that you can adjust the size of the rectangle without changing the opacity of the UIImage color.
Edit 2:
Added Swift 3 + Swift 4 code.
Zgski
source share