美文网首页
iOS 导航栏渐变

iOS 导航栏渐变

作者: 至尊宝_4233 | 来源:发表于2021-11-11 11:35 被阅读0次
    效果图.gif

    直接上代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
        ///iOS 15更新后,导航栏变白,静止情况看不清
        if (@available(iOS 13.0, *)) {
            UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
            [appearance configureWithOpaqueBackground];
            appearance.backgroundColor = [UIColor purpleColor];
            self.navigationController.navigationBar.standardAppearance = appearance;
            self.navigationController.navigationBar.scrollEdgeAppearance = self.navigationController.navigationBar.standardAppearance;
        } else {
            // Fallback on earlier versions
        }
        
        self.navigationController.navigationBar.translucent = YES;
        self.navigationController.navigationBar.subviews[0].alpha = 0;
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        // 设置导航栏为透明,并根据当前tableView的偏移量设置对应的 alpha
        self.navigationController.navigationBar.translucent = YES;
        [self setNavigationBarColorWithOffsetY:self.table.contentOffset.y];
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        // 设置导航栏 为不透明
        self.navigationController.navigationBar.translucent = NO;
        self.navigationController.navigationBar.subviews[0].alpha = 1.0;
    }
    
    //监听scrollView滑动
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        if (scrollView == self.table) {
            CGFloat offsetY = scrollView.contentOffset.y;
            [self setNavigationBarColorWithOffsetY:offsetY];
        }
    }
    
    // 界面滑动时导航栏随偏移量 实时变化
    - (void)setNavigationBarColorWithOffsetY:(CGFloat)offsetY {
        UIImageView *backView = self.navigationController.navigationBar.subviews[0];
        if (offsetY <= 0) {
            backView.alpha = 0;
            self.lab.textColor = [UIColor redColor]; //这里可以根据UI设置导航栏上的控件显示的颜色
        } else if (offsetY > 0 && offsetY < 91) {
            backView.alpha = offsetY / 91;
        } else if (offsetY >= 91 ) {//&& offsetY <= NavBar_HEIGHT + 30
            backView.alpha = 1;
            self.lab.textColor = [UIColor yellowColor]; //这里可以根据UI设置导航栏上的控件显示的颜色
        }
    }
    

    这是一种实现方法,另一种可以使用kvo监听 contentOffset.y 也可以实现。
    需要写上

    superScrollView .addObserver(self, forKeyPath: "contentOffset", options: NSKeyValueObservingOptions(rawValue: 0), context: nil)
    

    然后,再监听回调中,实现导航渐变

    相关文章

      网友评论

          本文标题:iOS 导航栏渐变

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