美文网首页
导航栏透明效果,UIScrollView滚动渐变

导航栏透明效果,UIScrollView滚动渐变

作者: njim3 | 来源:发表于2018-06-19 15:59 被阅读47次

前言

目前市面上大部分APP使用导航栏透明的效果,并且通常下面跟随着UIScrollView或UITableView,或者两者的结合。笔者根据这种效果实现了一个例子。

效果

效果图

实现细节

由于导航栏UINavigationBar的分层结构,只设置其barTintColor发现不起作用。需要设置backgroundImage(背景)和shadowImage(下面的线)才会改变颜色。

- (void)setNavColorWithAlpha: (CGFloat)alpha {
    [self.navigationController.navigationBar setShadowImage: [UIImage new]];
    
    [self.navigationController.navigationBar setBackgroundImage:
     [UIImage imageWithColor: [COLOR_NAV colorWithAlphaComponent: alpha]]
                                                  forBarMetrics: UIBarMetricsDefault];
}

setShadowImage为去掉导航下面的线,setBackgroundImage为设置背景(生成特定颜色值的一张图UIColor -> UIImage)
随着UIScrollView的滚动,导航栏的透明度会发生变化,即在UIScrollView的代理方法中编写

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat offsetY = scrollView.contentOffset.y;
    
    if (offsetY < 0.0)
        offsetY = 0.0f;
    
    CGFloat bottomGradualY = self.topBannerIV.frame.size.height / 2 - NAVBAR_HEIGHT;
    CGFloat alpha = 1.0f;
    
    if (offsetY < bottomGradualY) {
        alpha = 1.0f - (bottomGradualY - offsetY) / bottomGradualY;
    }
    
    [self setNavColorWithAlpha: alpha];
}

滚动到顶端时,设置offsetY为0。在这里顶部为一张banner图,设置导航过其1/2时alpha变为1。

代码

代码托管至github中,添加了MJRefresh下拉刷新示例。

https://github.com/njim3/NavScrollDemo.git

相关文章

网友评论

      本文标题:导航栏透明效果,UIScrollView滚动渐变

      本文链接:https://www.haomeiwen.com/subject/ynbaeftx.html