思路
根据滑动的距离修改颜色,在scrollView 代理
- (void)scrollViewDidScroll:(UIScrollView*)scrollView
修改颜色的方法
1、通过设置NavigationBar的背景图片来修改颜色
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[kNavColor colorWithAlphaComponent:alpha] andSize:CGSizeMake(1, 1)] forBarMetrics:UIBarMetricsDefault];
需要注意的有两点:
一:同时要修改statusBar的颜色
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
二:要设置navigationBar的shadowImage
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
2、在navigationBar的图层中添加一层View,动态的设置View的背影色来修改navigationBar的背景色(这是看了动态修改UINavigationBar的背景颜色这篇文章学到的方法)
核心代码是:
static char overlayKey;
- (UIView *)overlay
{ return objc_getAssociatedObject(self, &overlayKey);
} - (void)setOverlay:(UIView *)overlay{ objc_setAssociatedObject(self, &overlayKey, overlay, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
这个是用objcRuntime给类别添加属性,相关的可以看这篇博客