实现渐变色的导航栏设置

func setGradientBackgroundColors() {
    let gradient = CAGradientLayer()
    gradient.startPoint = CGPoint(x:0,y:0.8)
    gradient.endPoint   = CGPoint(x:1,y:0.1)
    gradient.locations = [0,1]
    gradient.frame = CGRect(x:0,y:0,width:kScreenW,height:self.navigationBar.bounds.height+kStatusBarH)
    gradient.colors = naviBackgroundCGColors
   self.navigationBar.layer.addSublayer(gradient)
 }

//经过一段时间使用发现,这种写法有问题,当你在NavigationController的某一个childViewController设置self.navigationController.navigationBar.hidden = YES; 即某一个VC中需要隐藏导航栏(我这边是rootViewController需要隐藏),在其他子控制器(未隐藏)设置 self.navigationItem 的 title 或titleView 会出现不显示的问题

解决方案:
通过查看图层可以获悉设置背景色的视图类名为 _UIBarBackground 因此,可以不必在navBar中插入子图层 (subLayer) (这也是出现这个bug的原因所在) ,将渐变图层加入到 _UIBarBackground 中,代码如下:
for sub in self.navigationBar.subviews{
if sub.isKind(of:(NSClassFromString("_UIBarBackground").self)!){
sub.layer.addSublayer(gradient)
}

你可能感兴趣的:(实现渐变色的导航栏设置)