I implemented a gradient in my navigation bar with the help of this answer. However, the gradient excludes the search bar.
But this is what I would like:
Any idea what seems to be the problem? Big thank you for any help someone can offer. I'll share my code below.
extension UINavigationBar {
func setGradientBackground(colors: [UIColor]) {
var updatedFrame = bounds
updatedFrame.size.height += 20
let gradientLayer = CAGradientLayer(frame: updatedFrame, colors: colors)
setBackgroundImage(gradientLayer.createGradientImage(), for: UIBarMetrics.default)
}
}
extension CAGradientLayer {
convenience init(frame: CGRect, colors: [UIColor]) {
self.init()
self.frame = frame
self.colors = []
for color in colors {
self.colors?.append(color.cgColor)
}
startPoint = CGPoint(x: 0, y: 0)
endPoint = CGPoint(x: 0, y: 1)
}
func createGradientImage() -> UIImage? {
var image: UIImage? = nil
UIGraphicsBeginImageContext(bounds.size)
if let context = UIGraphicsGetCurrentContext() {
render(in: context)
image = UIGraphicsGetImageFromCurrentImageContext()
}
UIGraphicsEndImageContext()
return image
}
}
My ViewController:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationBarGradient(colors: [UIColor.init(hex: "0089FC" ),
UIColor.init(hex: "56ACF5" )])
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
}
}
private func navigationBarGradient(colors: [UIColor]) {
navigationController?.navigationBar.setGradientBackground(colors: colors)
}