iOS collectionView/tableView动态刷新高度并且刷新内容,不进行Reload

509 阅读1分钟

很多时候,我们在修改改完数据后需要更新 cell 数据.那么正常情况下我们直接 reload 就好了.但是有写情况下我们就不能采取 reload,那么我们在改完数据后不走正常的刷新流程如何将cell 内容已经高度进行更新呢?

首先介绍一下场景.为什么说我们这个cell 内容不能进行 reload... 因为我们这个 cell 上有视频在播放,那么如果你操作数据通过 reload 进行刷新 cell 时.那么这些 cell 都回从缓存池中重新取一个出来.那么视频的播放等都进行了重置.会存在很多一场情况...

而且现在我们UI 的搭建都是通过约束布局的那么刷新数据的时候怎么才能动态拉伸高度呢?

UITableView:

1.修改 cell 中需要变化的数据,如点赞后 显示点赞人一列,评论后展示评论数据...等

2.修改约束

3.通知UITableView刷新高度

    UITableView *tableview = (UITableView *)self.superview;    if ([tableview isKindOfClass:[UITableView class]]) {        [tableview beginUpdates];        [tableview layoutIfNeeded];        [tableview endUpdates];    }

那么这样基本上就可以解决UITableView高度刷新...

UICollectionView:

1.修改 cell 内容.有变化的内容

2.修改约束.layout/或者计算高度缓存起来

3.通知 collectionView 刷新内容

UICollectionView *collectionView = ....
[collectionView performBatchUpdates:^{            UICollectionViewFlowLayoutInvalidationContext *context = [[UICollectionViewFlowLayoutInvalidationContext alloc] init];            // 假设我们要更新第一个 section 中第一个 item 的高度            [context invalidateItemsAtIndexPaths:@[indexPath]];            [collectionView.collectionViewLayout invalidateLayoutWithContext:context];        } completion:^(BOOL finished) {         }];

它这个时候会调用 flowlayout 代理方法中的 返回size 的代理方法.

如果是约束布局的应该就不用管..

有这样需求的可以试试