美文网首页
navigationBar渐变,但左右按钮不变

navigationBar渐变,但左右按钮不变

作者: 桃花流水鳜鱼肥 | 来源:发表于2017-05-24 16:15 被阅读44次

渐变的思路是设置alpha的变化,但是直接设置navigationBar的alpha变化会导致左右按钮一起变化。为了解决这个问题,有如下过程:
1.给navigationBar添加一张透明背景,设置navigationBar透明,但是左右按钮显示。
2.在navigationBar底下插入一个UIToolBar,在渐变过程中变化这个UIToolBar的alpha。

自定navigationController:

class MyNavigationController: UINavigationController {
    
    var frostedView: UIToolbar = UIToolbar()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.setup()
    }
    
    func setup() {
        // navigationBar透明,但是按钮还在
        self.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationBar.shadowImage = UIImage()// 去掉横线
        
        let maskingView = UIView()
        maskingView.isUserInteractionEnabled = false
        maskingView.backgroundColor = UIColor.clear
        self.navigationBar.superview?.insertSubview(maskingView, belowSubview: self.navigationBar)//只作alpha变化效果的控件最好不要遮盖原本的控件,所以插入到它下面一层
        maskingView.snp.makeConstraints { (make) in
            make.left.bottom.right.equalTo(self.navigationBar)
            make.top.equalTo(self.navigationBar)
        }

        self.frostedView.alpha = 0
        self.frostedView.isUserInteractionEnabled = false
        self.frostedView.clipsToBounds = true
        maskingView.addSubview(self.frostedView)
        self.frostedView.snp.makeConstraints { (make) in
            make.edges.equalTo(maskingView)
        }
    }

}

在需要渐变的Controller:

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let offsetY = scrollView.contentOffset.y
        
        var zAlpha = offsetY / 60
        if zAlpha < 0 {
            zAlpha = 0
        }
        else if zAlpha > 1 {
            zAlpha = 1
        }
        (self.navigationController as! MyNavigationController).frostedView.alpha = zAlpha
    }

相关文章

网友评论

      本文标题:navigationBar渐变,但左右按钮不变

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