swift 导航栏滑动透明渐变

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.alpha = 0.0
        // 防止APP后台运行, 再进入前台, 上方出现一块空白
        self.navigationController?.navigationBar.isTranslucent = true
        
        // 当APP从后台进入前台, 根据 scrollView 的 contentOffset 设置导航栏透明度
        NotificationCenter.default.addObserver(self, selector: #selector(becomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // 防止进入其他页面导航栏展示异常
        self.navigationController?.navigationBar.alpha = 1.0
        self.navigationController?.navigationBar.isTranslucent = false
    }

    // APP 从后台进入前台, 改变导航栏透明度
    @objc func becomeActive() {
        self.setAlpha()
    }
    
    // scrollView滑动 改变导航栏透明度
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        self.setAlpha()
    }
    
    func setAlpha() {
        let offsetY = scroll.contentOffset.y
        let alpha = 1 - (kNavBarAndStatusBarHeight - offsetY) / kNavBarAndStatusBarHeight
        self.navigationController?.navigationBar.alpha = alpha
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容