iOS UITableView---HeaderView 实现 下拉等比例放大(不是单纯的变长)

闲来无事,看到之前做的app有这个效果,但不是我写的,就动手撸了一撸,以为很简单,发现点小问题。话不多说,看下效果

效果图

1.gif

思路(不对的)

一开始我是这样做的
1.实例化一个UIImageView 对象,设置给tableView的tableHeaderView。
2.通过UIScrollView 的代理方法 来改变那个ImageView 的frame。

现实是--这样根本不行,首先无论你设置的width 是多少 headerView的宽 都是屏幕的宽度,所以 当ScrollView 的代理方法走的时候 我去设置 frame ,ImageView 的宽度是不变的。。。即使设置的contentMode 也有问题。而且效果并不好。后来我在ImageView的后面加了一个父识图, 这回就好了。

------------------------分割线(不哔哔)--------------------------

直接上代码

1.初始化

- (void)viewDidLoad {
    [super viewDidLoad];
 
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) style:UITableViewStylePlain];
    UIImageView *headView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1"]];
    //headView.contentMode =UIViewContentModeScaleAspectFit;
    headView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 300);
    _headView = headView;

    UIView *back = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 300)];
    back.backgroundColor = [UIColor redColor];
    [back addSubview:_headView];
    
    //设置headerView
    _tableView.tableHeaderView = back;;
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
    [self.view addSubview:_tableView];   
}

2.通过UIScrollView的代理方法 去改变back视图上子视图的frame

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat width = [UIScreen mainScreen].bounds.size.width;
    CGFloat yOffset = scrollView.contentOffset.y  ;
    if (yOffset < 0) {
        CGFloat totalOffset = 300 + ABS(yOffset);
        CGFloat f = totalOffset / 300;
        _headView.frame = CGRectMake(- (width * f - width) / 2, yOffset, width * f, totalOffset);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,557评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,141评论 5 13
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,534评论 1 14
  • 活在当下,这个曾经高大上的词现在已经普世化了,随便问一个人,“如何保持心灵平静?”,他/她都会回答:活在当下。 然...
    娜娜育儿育己阅读 405评论 0 0
  • 今天上午女儿去学画画,中午我去接女儿时,她的老师说,你看,这是我们今天画的造型素描,圆体,看她画的明暗交界线...
    梁佳硕妈妈阅读 291评论 0 0