(一)
首先我们要知道,设置NavigationBar的BackgroundColor为clear是并没有什么卵用的,不信你可以试一下.
那么网上很多的做法是这样的:
//设置NavigationBar的子视图imageView为无图
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
//去掉导航栏下面的下划线,同样也是一个imageView,同样设置为无图
self.navigationController.navigationBar.shadowImage = [UIImage new];
这种方法也确实能达透明的效果,你可以试一下.
那么,我们能从上面的这两行代码中获取到几条信息:
(1).NavigationBar上面确实有一个子视图是imageView,我们现实中看到的也就是这个图片,因此设置它为无图片我们就可以看到透明,而设置BackgroundColor却不行.
(2).我们还设置了shadowImage为无图,它其实就是导航栏下面的那根细线,如果你不写第二句话你则会看到一根线.
(3).我们打开图层看一下,NavigationBar他背后是有一张类型为_UINavigationBarBackground(UIImageView的子类)的视图,我们设置BackgroundImage其实就是设置_UINavigationBarBackground的image.
(二)
那么新需求又来了,有时候我们不仅仅是想要NavigationBar为透明,还需要将其透明度根据下面的滑动视图的偏移量,让透明度渐变,其实就是一个简单的操作,我们直接获取NavigationBar上面的那个imageView,代码如下:
barImageView = self.navigationController.navigationBar.subviews.firstObject;
//提前给barImageView一个背景色(给barImageView设置一个图片也行)
barImageView.backgroundColor = [UIColor greenColor];
这个barImageView可以用一个全局的变量来引用一下,方便我们使用.
其实到这一步就已经可以了,那么我们还需要做点什么呢?
往下看:
我们在下面的这个方法中根据scrollView的偏移量来改变barImageView的背景颜色或者透明度就行了
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
barImageView.alpha = scrollView.contentOffset.y / -64;
}
这样就可以实现了!
如果你感觉对你有帮助,请留言或者关注我的微信公众号西河老伯iOS开发来支持我!