首先我们想到的肯定是在UISrollView的delegate方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
根据当前的contentOffset
更新navigationBar的backgroundColor即可.
思路
首先想到的是最常用的[UINavigationBar appearance]
,我们一般会在AppDelegate中使用它对navigationBar进行统一的设置。但是如果试一下,会发现在scrollViewDidScrollView
中调用它并不能动态地改变navigationBar的颜色,原因是: iOS应用出现变化时,视图会进入一个窗口,它不能改变已经再一个窗口的外观。
我们换一个方法试试看,直接修改UINavigationBar的backgroudColor:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
UIColor *color = [UIColor redColor];
CGFloat offsetY = scrollView.contentOffset.y;
if (offsetY > 0) {
CGFloat alpha = 1 - ((64 - offsetY) / 64);
self.navigationController.navigationBar.backgroundColor = [color colorWithAlphaComponent:alpha];
} else {
self.navigationController.navigationBar.backgroundColor =