2018-04-08 渐变导航栏配置设置

渐变即由透明到显现,由看得见到消失不见

原理: UIScrollView的偏移量,作差值公式的alpha变化设置导航栏及其子视图的颜色和透明度的变化

1.去除导航栏及其底部一根碍眼的线

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
        //去掉导航栏与self.view中间的那根线
    [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
    UINavigationBar * navigationBar = [UINavigationBar appearance];
    navigationBar.backgroundColor = [UIColor clearColor];
    navigationBar.barTintColor = [UIColor clearColor];
}

2. 恢复全局的导航栏设置,不可能说每个页面都是渐变的,如果有那就当我没说

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    UINavigationBar * navigationBar = [UINavigationBar appearance];
    navigationBar.barTintColor = [UIColor orangeColor];
    navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName : [UIFont systemFontOfSize: 15]};
}

3. 插值算法 这里的kNavBarHeight是导航栏+状态栏的高度,当然也可以是你自定义视图的高度,只是一个定值,用于计算alpha(可以这么理解,往下拽的时候是透明的,往上推的时候到某一个点的时候就开始变色了,变着变着就不变了...)

    CGFloat offsetY = scrollView.contentOffset.y;
    UIColor *color = [UIColor blueColor];
    if (offsetY > kNavBarHeight) {
        if (offsetY > kNavBarHeight*2) {
            offsetY = kNavBarHeight*2;
        }
        CGFloat alpha = (offsetY - kNavBarHeight)/kNavBarHeight;
        //各种视图透明度设置为alpha
    }else{
      //各种视图设置为透明
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 在开发过程中,经常会碰到控制器对应的导航栏的背景颜色不一致或者需要让导航栏背景透明的需求。在导航控制器pus...
    渐z阅读 2,893评论 0 8
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,255评论 4 61
  • 樱花漫上枝头,太匆匆。奈何光阴似箭,无欲留。 长亭外,古道边,何时逢。自是西出阳关,破长风。
    春安利阅读 272评论 0 5
  • 如果能和你谈一天的恋爱, 我肯定会在前一晚激动的睡不着觉, 一遍又一遍,一件又一件, 试约会要穿的衣服。 如果能和...
    归鸟不知春晓阅读 671评论 10 6
  • —黑龙江省“群众最喜爱的人民警察”张国森同志 三周年祭 作者:逯春生 山路弯弯 无尽绵延 兴安岭的大风呼...
    白马石阅读 217评论 0 0