How can I set the UINavigationbar with gradient color?

前端 未结 11 708
花落未央
花落未央 2020-11-30 22:27

I want to set the UINavigationbar backgroundColor to a gradient color where I would like to set it via an array of colors to create a Gradient, ide

11条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-30 23:32

    For Swift 4.2

    extension UINavigationBar {
        func setGradientBackground(colors: [Any]) {
            let gradient: CAGradientLayer = CAGradientLayer()
            gradient.locations = [0.0 , 0.5, 1.0]
            gradient.startPoint = CGPoint(x: 0.0, y: 1.0)
            gradient.endPoint = CGPoint(x: 1.0, y: 1.0)
    
            var updatedFrame = self.bounds
            updatedFrame.size.height += self.frame.origin.y
            gradient.frame = updatedFrame
            gradient.colors = colors;
            self.setBackgroundImage(self.image(fromLayer: gradient), for: .default)
        }
    
        func image(fromLayer layer: CALayer) -> UIImage {
            UIGraphicsBeginImageContext(layer.frame.size)
            layer.render(in: UIGraphicsGetCurrentContext()!)
            let outputImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return outputImage!
        }
    }
    

    How to use

       self.navigationController?.navigationBar.setGradientBackground(colors: [
                UIColor.red.cgColor,
                UIColor.green.cgColor,
                UIColor.blue.cgColor
                ])
    

提交回复
热议问题