#define HeadViewH 200 // 顶部view高度
#define HeadViewMinH 44 //选项卡高度
#define tabBarH 64 //导航栏高度
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITableView *tabelView;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *headHeightCons;/**顶部view的高度**/
@property (nonatomic,weak) UILabel *label; /** 导航栏文字*/
@property (nonatomic,assign) CGFloat beginOffset ;/** 初始偏移量*/
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 设置TableView数据源跟代理
self.tabelView.dataSource = self;
self.tabelView.delegate = self;
// 设置导航栏
[self setUpNavigationBar];
// 不需要添加额外滚动区域
self.automaticallyAdjustsScrollViewInsets = NO;
// 记录初始偏移量
_beginOffset = -(HeadViewH + HeadViewMinH);
// 设置tabelView顶部滚动区域 设置滚动区域会调用scrollViewDidScroll:这个方法
self.tabelView.contentInset = UIEdgeInsetsMake(HeadViewH + tabBarH, 0, 0, 0);
}
// 抽取导航栏设置
- (void)setUpNavigationBar
{
/**设置导航条的背景为透明*/
// UIBarMetricsDefault 设置导航条背景图片
// 传递一个空的UIImage
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
// 清空导航条的阴影线,传一个空的图片
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc]init]];
/**
设置头部标题为透明
*/
UILabel *label = [[UILabel alloc]init];
label.text = @"年轻在于折腾";
// 设置文字颜色
label.textColor = [UIColor colorWithWhite:1 alpha:0];
// 尺寸自适应
[label sizeToFit];
_label = label;
// 添加到导航条
[self.navigationItem setTitleView:self.label];
}
#pragma mark UITableViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
/**
* 图片的处理
*/
// 获取当前偏移量的Y值
CGFloat curOffsetY = self.tabelView.contentOffset.y;
//偏移量的差值 = tabelView滚动了多少
// 当前偏移量的值 - 原始偏移量的值
CGFloat delta = curOffsetY - self.beginOffset;
// 求出图片高度
CGFloat H = HeadViewH - delta;
// 如果图片高度值小于的导航栏的高度,就让它跟导航栏等高
if (H < tabBarH) {
H = tabBarH;
}
// 图片的高度跟随偏移量的值改变
self.headHeightCons.constant = H ;
/**
* 导航栏的处理
*/
// 计算透明度
CGFloat alpha = delta / (HeadViewH - HeadViewMinH);
if (alpha > 1) {
alpha = 0.99;
}
// 设置导航栏文字
self.label.textColor = [UIColor colorWithWhite:0 alpha:alpha];
// 设置导航栏背景图片,根据当前alpha值生成图片
UIImage *image = [UIImage imageWithColor:[UIColor colorWithWhite:1 alpha:alpha]];
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}
图片的处理
+ (UIImage*)imageWithColor:(UIColor*)color
{
//描述矩形
CGRectrect=CGRectMake(0.0f,0.0f,1.0f,1.0f);
//开启位图上下文
UIGraphicsBeginImageContext(rect.size);
//获取位图上下文
CGContextRefcontext =UIGraphicsGetCurrentContext();
//使用color演示填充上下文
CGContextSetFillColorWithColor(context, [colorCGColor]);
//渲染上下文
CGContextFillRect(context, rect);
//从上下文中获取图片
UIImage*theImage =UIGraphicsGetImageFromCurrentImageContext();
//结束上下文
UIGraphicsEndImageContext();
returntheImage;
}