I'm passing my UIKit app to SwiftUI and struggle to make this work.
I want to put a left to right gradient on each navigation bars of my double column iPad display.
I've tried various approach but never quite make it.
I'm passing my UIKit app to SwiftUI and struggle to make this work.
I want to put a left to right gradient on each navigation bars of my double column iPad display.
I've tried various approach but never quite make it.
Using FRIDDAY's answer from How change background color if using NavigationView in SwiftUI?, I achieved the much appreciated gradient:
extension UINavigationController {
override open func viewDidLoad() {
super.viewDidLoad()
let gradient = CAGradientLayer()
gradient.frame = self.view.bounds
gradient.colors = [UIColor(Colors.red).cgColor, UIColor(Colors.orange).cgColor]
gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
let standard = UINavigationBarAppearance()
standard.backgroundImage = gradient.toImage()
let compact = UINavigationBarAppearance()
compact.backgroundImage = gradient.toImage()
let scrollEdge = UINavigationBarAppearance()
scrollEdge.backgroundImage = gradient.toImage()
self.navigationBar.standardAppearance = standard
self.navigationBar.compactAppearance = compact
self.navigationBar.scrollEdgeAppearance = scrollEdge
}
}
extension CALayer {
func toImage() -> UIImage {
UIGraphicsBeginImageContext(self.frame.size)
self.render(in: UIGraphicsGetCurrentContext()!)
let outputImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return outputImage!
}
}