博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tableView下拉头部放大
阅读量:5786 次
发布时间:2019-06-18

本文共 3078 字,大约阅读时间需要 10 分钟。

这个效果很多见得, 想自己实现一下试试

主要的就是一个计算问题

####直接附上代码 #import "ViewController.h"

#define KScreen_Width [UIScreen mainScreen].bounds.size.width#define KScreen_Height [UIScreen mainScreen].bounds.size.height#define imgHeight 200@interface ViewController ()
{ UITableView * rootTableView; UIImageView * headerImg;}@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; rootTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, KScreen_Width, KScreen_Height)]; rootTableView.delegate = self; rootTableView.dataSource = self; rootTableView.contentInset = UIEdgeInsetsMake(imgHeight, 0, 0, 0); [self.view addSubview:rootTableView]; headerImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, -imgHeight, KScreen_Width, imgHeight)]; headerImg.image = [UIImage imageNamed:@"1.jpg"]; headerImg.contentMode = UIViewContentModeScaleAspectFill;// !! [rootTableView addSubview:headerImg]; // Do any additional setup after loading the view, typically from a nib.}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 40;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString * ID = @"cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]; } cell.textLabel.text = [NSString stringWithFormat:@"数据---%ld",indexPath.row]; return cell;} - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat offsetY = scrollView.contentOffset.y; NSLog(@"%f",offsetY); CGFloat offsetH = imgHeight + offsetY;// offsetH是相对的偏移量(偏移量应该是scrollView.contentOffset.y 但是rootTableView.contentInset = UIEdgeInsetsMake(imgHeight, 0, 0, 0) tableView提前设置便宜了一段距离 所以现在相对的偏移量应该是offsetH) if (offsetH < 0) {//下拉偏移为负数 CGRect frame = headerImg.frame; frame.size.height = imgHeight - offsetH;//下拉后图片的高度应变大 frame.origin.y = -imgHeight + offsetH;// 下边界是一定的 高度变大了 起始的Y应该上移 headerImg.frame = frame; }}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end复制代码

####最重要的部分就是下面这段计算 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat offsetY = scrollView.contentOffset.y; NSLog(@"%f",offsetY); CGFloat offsetH = imgHeight + offsetY;// offsetH是相对的偏移量(偏移量应该是scrollView.contentOffset.y 但是rootTableView.contentInset = UIEdgeInsetsMake(imgHeight, 0, 0, 0) tableView提前设置偏移了一段距离 所以现在相对的偏移量应该是offsetH) if (offsetH < 0) {//下拉偏移为负数 CGRect frame = headerImg.frame; frame.size.height = imgHeight - offsetH;//下拉后图片的高度应变大 frame.origin.y = -imgHeight + offsetH;// 下边界是一定的 高度变大了 起始的Y应该上移 headerImg.frame = frame; } } 具体的分析在代码后面已经做了注释

#####当然了,还有关于tableView的一些设置,比如 rootTableView.contentInset = UIEdgeInsetsMake(imgHeight, 0, 0, 0);

#####还有头部图片的设置 headerImg.contentMode = UIViewContentModeScaleAspectFill;// !!

注:图片是直接加在tableview上面的,并不是tableView的header

转载地址:http://sfxyx.baihongyu.com/

你可能感兴趣的文章
nagios一键安装脚本,nagios监控被监控主机上的应用服务mysql数据库
查看>>
grep 命令
查看>>
JS二维数组的声明和使用
查看>>
v$archive_gap dg dataguard 断档处理 scn恢复
查看>>
问责IT风险管理:CIO需关注两个重点
查看>>
Winform打包发布图解
查看>>
PDF文件怎么编辑,超简单的方法
查看>>
EasyUI基础入门之Easyloader(载入器)
查看>>
Uva 839 Not so Mobile
查看>>
30款超酷的HTTP 404页面未找到错误设计
查看>>
程序猿必备 MyEclipse2013-2014系列
查看>>
在图里, 你看到了什么? 5秒内看到的话, 你很牛
查看>>
java中ArrayList 、LinkList区别
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
利用rand7()构造rand10()
查看>>
MySQL 备份与恢复
查看>>
吃午饭前,按书上的代码写会儿--Hunt the Wumpus第一个版本
查看>>
easyui中combobox的值改变onchang事件
查看>>
Eclipse魔法堂:任务管理器
查看>>
一周自学动态站点设计
查看>>