最近在做项目,UI要求做一个导航栏随着ScrollView滚动而渐变的效果,所以开始研究怎么最简洁的方法来实现这个效果.到最后发现几句代码就能搞定,现在分享给大家,我用的是Swift3.0.用OC的可以按照写法转换成OC语句即可
1.首先需要将导航栏设置成透明
//在ViewDidLoad中设置导航栏需要显示的主题颜色
self.navigationController?.navigationBar.barTintColor = RGBA(R: 255, G: 90, B: 84, A: 1)
//将navigationBar的第一个View,透明度设置成0,这样就可以实现导航栏透明,
//第一个View指的是导航栏+信息栏的64px的View
self.navigationController?.navigationBar.subviews[0].alpha = 0
2.在滚动的时候计算需要显示的透明度
//实现ScrollView的代理方法,TableViewS自继承ScrollView,
func scrollViewDidScroll(_ scrollView: UIScrollView) {
//获取ScrollView的偏移量y
let offsetY = scrollView.contentOffset.y
print(offsetY)
//自己设置需要滚动到哪里可以完全显示导航栏
let ScrollValue:CGFloat = 64.0
//将偏移量除以需要滚动的量,可以得到需要显示的透明度
var alpha = offsetY / ScrollValue
if alpha >= 1{
alpha = 1
}
//将透明度赋值给第一个View即可
self.navigationController?.navigationBar.subviews[0].alpha = alpha
}
上面几句代码即可完成导航栏的渐变效果.有兴趣的可以采取这种方法试一试.
px:如果有问题可以回复我一起讨论