实现渐变色的导航栏设置

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)
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //中间 //self.navigationItem.title = @"标题"; UIView*redView ...
    JakieZhang阅读 5,559评论 0 2
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 12,722评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,541评论 5 13
  • 本文解决的问题 如何深度定制 NavigationBar 样式 统一设置APP的返回按钮 解决自定义leftIte...
    Aaronn阅读 8,710评论 6 14
  • 问题 1.什么是闭包? 有什么作用?闭包的含义: 在一个函数中(父函数)return出另一个函数(子函数),该子函...
    璐璐熙可阅读 2,823评论 0 1

友情链接更多精彩内容