6
回答
IOS 如何动态设置每个TableViewCell的高度?
注册华为云得mate10,2.9折抢先购!>>>   
我怎么动态设置UITableView的Cell的高度,在我的TableViewCell里面有加载网络的图片,但每个图片的高度都是不一样的,  开始的时候,我加载了一张默认的图片,设置了CELL的高度,但当我异步加载了真正图片之后 ,这个时候怎么去调整每个Cell的高度
iOS
举报
回回回
发帖于6年前 6回/32K+阅
共有6个答案 最后回答: 3年前

加载完图片之后,调用

[tableView beginUpdate]

[tableView endUpdate]

之后tableView就会再次调用heightForRowAtIndexPath,这时候你就可以返回正确的cell高度给它了。

--- 共有 5 条评论 ---
iChester回复 @啊达 : 直接在当前tableview里获取数据,进行修改 5年前 回复
子达如何回复 @饥饿沉淀器 : 求分享解决办法 5年前 回复
iChester回复 @饥饿沉淀器 : 我已经解决了,不用这种方法。。。 5年前 回复
iChester我用你这种方法加载完webview然后返回到tableview去算cgfloat是ok的, 但我又用这个方法去在我自定义的cell里算完cell高度后,返还到tableview去改变cgfloat就不行了,为什么啊??? 5年前 回复
回回回谢谢 5年前 回复
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 方法
--- 共有 2 条评论 ---
iChester回复 @回回回 : 看下我说的方法,不过估计你早都实现了。。。 5年前 回复
回回回这个方法是在加载TableViewCell的时候先执行的,我现在是开始的时候在你说的那个方法里面设置了高度,然后异步 加载图片,加载过来的图片的高度可能 不一样,这时候怎么重新设置这个Cell的高度 6年前 回复
你会有这个问题是因为你把数据加载的过程让Cell去做了。Cell只是一个View,它的所有行为都是Controller来控制的。Cell只负责根据传进来的数据进行显示。数据的加载都在Controller里做完,然后reloadData。一切自动就好了。


有一种解决办法是这样的:

1、

设置一个专门管理cell高度的字典,用indexPath.row作为KEY,Value初始化为44。比如名字叫heightDict

2、

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

在这个方法中,indexPath.row作为key,从heightDict中拿到Value。这个value就是返回值。

3、

Cell中,每次下载更新图片前,先把cell高度保存起来。等下载更新完成,界面重新设置完毕后,比较当前cell高度和保存值是否相同。如果不同,就发delegate给ViewController,把当前cell高度和indexpath当作参数传递出去。

4、

ViewController中的delegate回调方法中,把indexPath.row作为key,将传入的Cell高度存入heightDict中,然后[tableView reloadData]

5、搞定。


顶部