navigationBar渐变,但左右按钮不变
2017-05-24 本文已影响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
}