Reputation: 1743
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.
Upvotes: 0
Views: 1089
Reputation: 1743
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!
}
}
Upvotes: 2