想着把这个方法自己整理整理步骤,以便老年痴呆的时候可以回顾~
1、首先进行基础准备工作
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.contentArray = @[@"JJ",@"KK",@"LL",@"AA",@"JJ",@"KK",@"LL",@"AA",@"JJ",@"KK",@"LL",@"AA"];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
self.automaticallyAdjustsScrollViewInsets = NO;
2、让UITableView的内边距中,向下偏移200,留出200的空间给TableView
上方的ImageView
self.tableView.contentInset = UIEdgeInsetsMake(200, 0, 0, 0);
3、创建一个ImageView
,我们让它Y轴的位置在-200处,高度也设置为200,记得contentMode
设置为UIViewContentModeScaleAspectFill
,因为只有这样,才能让ImageView
在缩放的时候,里面的图片也跟着一起缩放。然后把ImageView
添加到TableView
上面。
UIImageView* imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, -200, self.view.frame.size.width, 200)];
imageView.image = [UIImage imageNamed:@"image4"];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.tag = 10001;
imageView.layer.masksToBounds = YES;
[self.tableView addSubview:imageView];
4、这里就是重头戏了,每当tableView
继承的scrollView
滚动的,偏移量超过初始的-200,就会开始计算新的ImageView
的frame
,实时改变,这样,UIViewContentModeScaleAspectFill
就派上用场了,可以把图片一起缩放。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint offsetPoint = scrollView.contentOffset;
if (offsetPoint.y < -200) {
//获取上次滚动生成的frame
CGRect frame = [self.tableView viewWithTag:10001].frame;
//把偏移的y值赋值给frame的y值,使其可以继续保持在原点
frame.origin.y = offsetPoint.y;
//把偏移的y值赋值给frame的高,使其可以贴着tableView
frame.size.height = -offsetPoint.y;
[self.tableView viewWithTag:10001].frame = frame;
}
}