UINavigationBar背景颜色渐变

参考 http://www.cocoachina.com/ios/20170331/18944.html

先看一下UINavigaionBar的层次结构


Paste_Image.png

1. 获取UIBarbackgroud视图,改变其透明度。

    self.barImageView = self.navigationController.navigationBar.subviews.firstObject;

2. 设置导航栏的背景图

在合适的地方设置导航栏的背景图,我是在AppDelegate中设置的

    [nav.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];  //设置背景

3.在UIScrollView的delegate方法改变改变导航栏的背景的透明度

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"y = %f",scrollView.contentOffset.y);
    CGFloat offsetY = scrollView.contentOffset.y;
    if(offsetY <= 85){
        CGFloat alpha = MIN(1,(offsetY)/150 ); 
        _barImageView.alpha = alpha;
    }else{
        _barImageView.alpha = 1;
    }
    NSLog(@"alpha = %f",_barImageView.alpha);
}

4.在viewWillAppear中设置_barImageView.alpha = 0

而且设置UIScrollView(tableView)的delegate = nil
viewWillDisapper同理

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    self.tableView.delegate = self;
    _barImageView.alpha = 0 ;
}


-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    self.tableView.delegate = nil;//为了防止页面push时,导航栏的背景还发生改变
    _barImageView.alpha = 1 ;

}

https://github.com/JnLuffy/LFY_UINavigationController.navigationBar

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容