如何在 UINavigationBar 中添加垂直渐变颜色?

Posted

技术标签:

【中文标题】如何在 UINavigationBar 中添加垂直渐变颜色?【英文标题】:How to add vertical Gradient color in UINavigationBar? 【发布时间】:2018-05-11 06:00:04 【问题描述】:

我想在UINavigationBar 中添加渐变色。水平渐变的代码完美地工作,但对于垂直渐变,它没有显示正确的颜色。

提前谢谢!!!

我当前的垂直渐变代码:

extension UINavigationBar 
    /// Applies a background gradient with the given colors
    func applyNavigationGradient( colors : [UIColor]) 

        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = self.bounds
        gradientLayer.colors = colors.map  $0.cgColor 

        // *** for horizontal gradient ***
        // gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5)
        // gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5)

        // *** for vertical gradient ***
        // gradientLayer.locations = [0,1]
        gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
        gradientLayer.endPoint = CGPoint(x: 0.5, y: 1.0)


        UIGraphicsBeginImageContext(gradientLayer.bounds.size)
        gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

         setBackgroundImage(image, for: UIBarMetrics.default)
     

【问题讨论】:

【参考方案1】:

swift 4.1 的工作代码。只需将以下内容放在确实加载的视图中:

func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let gradientLayer = CAGradientLayer()
    var updatedFrame = self.navigationController!.navigationBar.bounds
    updatedFrame.size.height += 20
    gradientLayer.frame = updatedFrame
    gradientLayer.colors = [UIColor.green.cgColor, UIColor.blue.cgColor]
    gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.0) // vertical gradient start
    gradientLayer.endPoint = CGPoint(x: 0.5, y: 1.0) // vertical gradient end

    UIGraphicsBeginImageContext(gradientLayer.bounds.size)
    gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    self.navigationController!.navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)

【讨论】:

欢迎,如果这是您正在寻找的内容,请竖起大拇指并使其成为认可的答案 :) 应该注意,这不适用于 ios11 大标题选项,对于渐变,请查看:***.com/questions/46196848/…

以上是关于如何在 UINavigationBar 中添加垂直渐变颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何完全以编程方式添加 UINavigationBar?

如何在 iOS 11 中引入的 UINavigationBar 的大标题视图上添加自定义视图

如何在 uinavigationbar 中的特定位置添加项目?

如何将全局 barButtonItems 添加到自定义 UINavigationBar?

垂直空间约束奇怪的行为

如何在 UINavigationBar 上添加 UISearchBar 动画