滚动放大图片 2018-09-21

屏幕快照 2018-09-21 下午5.07.19.png

屏幕快照 2018-09-21 下午5.08.16.png
  1. 进入页面隐藏导航栏 退出页面显示导航栏

- (void)viewWillAppear:(BOOL)animated {

    self.navigationController.navigationBar.hidden = YES;
}

- (void)viewWillDisappear:(BOOL)animated {

    self.navigationController.navigationBar.hidden = NO;
}

2.依次创建tableView, headImg, navView
tableView要设置contentInset,top值为图片高度-20

static const CGFloat kHeadImgWidth = 375;
static const CGFloat kHeadImgHeight = 165;


- (UITableView *)tableView {
    
    if (!_tableView) {
        _tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) style:UITableViewStylePlain];
        CGFloat headImvH = SCREEN_WIDTH / kHeadImgWidth * kHeadImgHeight;
        _tableView.contentInset = UIEdgeInsetsMake(headImvH-20, 0, 0, 0);
        _tableView.dataSource = self;
        _tableView.delegate = self;
    }
    return _tableView;
}

- (UIImageView *)headImv {
    
    if (!_headImg) {
        _headImg = [[UIImageView alloc] init];
        CGFloat headImvH = SCREEN_WIDTH / kHeadImgWidth * kHeadImgHeight;
        _headImg.frame = CGRectMake(0, 0, SCREEN_WIDTH, headImvH);
        _headImg.image = [UIImage imageNamed:@"login_bg"];
        _headImg.contentMode = UIViewContentModeScaleAspectFill;
        _headImg.clipsToBounds = YES;
    }
    return _headImg;
}

- (UIView *)navView {
    
    if (!_navView) {
        _navView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 64)];
        _navView.backgroundColor = CellWordDarkColor;
        _navView.clipsToBounds = YES;
        _titLab = [[UILabel alloc]init];
        _titLab.centerX = SCREEN_WIDTH * 0.5;
        _titLab.bounds = CGRectMake(0, 0, 150, 44);
        _titLab.textAlignment = NSTextAlignmentCenter;
        _titLab.font = [UIFont systemFontOfSize:12];
        _titLab.textColor = [UIColor whiteColor];
        _titLab.numberOfLines = 0;
        _titLab.text = @"明天休息了";
        [_navView addSubview:_titLab];
    }
    return _navView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = GlobalBGColor;
    
    [self.view addSubview:self.tableView];
    [self.view addSubview:self.headImv];
    [self.view addSubview:self.navView];
}

  1. 滚动时调用scrollView的代理方法(重要)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
    CGFloat offsety = scrollView.contentOffset.y;
    //  按比例换算出头像的初始化高度
    NSInteger headerH = SCREEN_WIDTH / kHeadImgWidth * kHeadImgHeight;
    //  拉伸后的高度 = 实际高度+偏移量
    CGFloat offset = headerH + offsety;
    
    //  图片移出可视范围,导航栏逐渐显示;图片进入视线,逐渐隐藏
    //  标题的高度亦随之变化
    self.navView.alpha = offset / 180;
    
    if (self.navView.alpha >= 1) {
        self.navView.alpha = 1;
    }
    
    self.titLab.Y = 64 - 44 * self.navView.alpha;
    
    //  图片的高度随其他内容显隐而随之变化
    self.headImv.frame = CGRectMake(0, 0, SCREEN_WIDTH, headerH - offset);
}
  1. tableView代理方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    return 20;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString *cellID = @"cellID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
    }
    cell.textLabel.text = [NSString stringWithFormat:@"测试数据——%td",indexPath.row];
    cell.detailTextLabel.text = [NSString stringWithFormat:@"测试数据——%td",indexPath.row];
    return cell;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Qt编写模块化插件式应用程序 优点: 1. 责任分块,多人协同开发应用程序,每个人只需要关心自己模块内部实现即可,...
    豪爵吸金ing阅读 9,467评论 0 2
  • 上学时,有位舍友的书架上放了一本《丰田生产管理方式》,厚厚的一本书,虎黄色的书封。我拿来翻了几页,只记住了一个词:...
    梅子的日志阅读 3,980评论 0 4
  • 其实这个文章标题并不太契合实际,最近工作都不太忙,所以也就不存在忙里偷闲了。但是,突然从脑中蹦出来,于是,姑且一用...
    清幽客阅读 1,228评论 0 2
  • “主持,弟子依旧放不下凡尘俗世,望主持准许弟子还俗。” 他声音满是沧桑,却掷地有声,仿若经过了激烈的思考。 “悟尘...
    斟茶公子阅读 4,262评论 10 8