tableView滚动时cell"立体"感

在一些图片为主的 TableView 上常看到在滚动列表时, cell 的图片会发生偏移,造成一种立体感.如图:

cell.gif

原理:

  1. 监听 tableView 滚动
  2. 改变 cell 中图片的 frame
    源码:https://github.com/SherlockQi/NEDynamicCell

实现:

自定义 cell

imageView 的上下约束要超过 cell 的 contentView

imageView的约束
监听滚动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    //可见 cell 
    NSArray<NETableViewCell*> *visibleCells = self.tableView.visibleCells;
    [visibleCells enumerateObjectsUsingBlock:^(NETableViewCell * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    //调用 cell 的方法,改变图片位置     
   [obj scrollCell:self.tableView];
    }];
}
cell 中改变图片 frame的方法
- (void)scrollCell:(UITableView *)tableView{
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    //当前 cell 在 window上的位置
    CGRect rect = [tableView convertRect:self.frame toView:window];
    //window 中心和 cell 下端的距离
    float distanceCenter = CGRectGetHeight(window.frame)/2 - CGRectGetMinY(rect);
    //cell 和 图片的高度差(imageView 要高于 cell )
    float difference = CGRectGetHeight(self.backImageView.frame) - CGRectGetHeight(self.frame);
    //imageView 需要偏移的量
    float imageMove = (distanceCenter / CGRectGetHeight(window.frame)) * difference;
    //新的 frame
    CGRect imageRect = self.backImageView.frame;
    imageRect.origin.y = imageMove - (difference/2);
    self.backImageView.frame = imageRect;
}

剪切掉超出cell 的图片

-(void)awakeFromNib{
    [super awakeFromNib];
    self.clipsToBounds = YES;
}

这样就可以实现效果了

注意:

一.页面跳动

但是在运行时会发现,在第一次滚动时页面会进行一次调整,页面会跳一下.
我们在页面显示完成后主动调用一下scrollViewDidScroll 方法就可以解决;

//视图加载完在调用scrollViewDidScroll方法
- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self scrollViewDidScroll:self.tableView];
}
二.分割线

为了让 cell 分开,自定义了 cell 分割线
但是在点击 cell 时 分割线会变透明,如图

解决:

 cell.selectionStyle = UITableViewCellSelectionStyleNone;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,259评论 4 61
  • 我们在上一篇《通过代码自定义不等高cell》中学习了tableView的相关知识,本文将在上文的基础上,利用sto...
    啊世ka阅读 1,538评论 2 7
  • 想念你在我受伤的时候给我送饭的样子,想念你因为我不吃韭菜而去给我做鸡蛋饼的时候,想念你做饭独有的口味,想念你在后厨...
    Y荣Y阅读 376评论 0 0
  • 阿萨德的
    李之若阅读 178评论 0 1
  • 回家日期 2017.05.15 第一次体内驱虫 06.07 第一次体外驱虫 06.14 第三针疫苗 06.16 你...
    李酒酒JOJO阅读 250评论 0 0