//给导航条设置一个空的背景图 使其透明化
[self.navigationController.navigationBar setBackgroundImage:[UIImagenew] forBarMetrics:UIBarMetricsDefault];
//去除导航条透明后导航条下的黑线
[self.navigationController.navigationBar setShadowImage:[UIImagenew]];
根据UITableView 的scrollViewDidScroll方法,我们能实时获得contentOffset.y值,根据该值的变化对刚才扩展的UINavigationBar的背景色的alpha值,做相应的变化,具体实现:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat reOffset = scrollView.contentOffset.y + (kScreenH - 64) * 0.2;
CGFloat alpha = reOffset / ((kScreenH - 64) * 0.2);
if (alpha <= 1)//下拉永不显示导航栏
{
alpha = 0;
}
else//上划前一个导航栏的长度是渐变的
{
alpha -= 1;
}
// 设置导航条的背景图片 其透明度随 alpha 值 而改变
UIImage *image = [self imageWithColor:[UIColor colorWithRed:0.227 green:0.753 blue:0.757 alpha:alpha]];
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}
/// 使用颜色填充图片
- (UIImage *)imageWithColor:(UIColor *)color
{
// 描述矩形
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
// 开启位图上下文
UIGraphicsBeginImageContext(rect.size);
// 获取位图上下文
CGContextRef context = UIGraphicsGetCurrentContext();
// 使用color演示填充上下文
CGContextSetFillColorWithColor(context, [color CGColor]);
// 渲染上下文
CGContextFillRect(context, rect);
// 从上下文中获取图片
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
// 结束上下文
UIGraphicsEndImageContext();
return theImage;
}