UITableView算高度问题

博客探讨了UITableView动态高度计算的高效方法,强调了UITableView的重用机制和回调顺序。建议在`heightForRowAt:`中避免复杂的布局计算,而是预先保存高度值或利用自定义cell的getHeight方法。文中推荐第三种方案,即使用全局变量的cell对象,通过单独的getHeight和setContent方法来提高性能,并邀请读者分享更优策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多人肯定都很困惑,UITableView如何算高度才最高效。

首先我们来理解一下UITableView的实现原理:

UITableView使用了重用机制,在其回调当中优先掉用

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 方法;然后再调用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法;

这对于很多喜欢在cellForRowAtIndexPath:方法中自定义cell,再计算高度的开发者而言很蛋疼;因为他在没创建cell之前,根本就不知道高度。

按照一般的开发思路,应该是先创建自定义的cell,然后设置内容、布局;然后再返回高度。但apple的实现思路确是:先把位置定好,再在对应的位置放cell。


特别注意:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 方法在UITableView刷新时都会调用一次;即如果是10个cell,你不管是reloadData、还是reloadCell都会调用10次上述方法;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法在reloadCell的时候只会调用一次。

知道reloadData、reloadCell的区别后,根据情况调用。


计算高度方法:

1、用一个数组保存cell或cell的高度值:

height:获得cell,返回高度,在数组中保存cell;

cell:从数组中获取,直接返回。


2、在height方法中调用cell方法,返回高度:

height:

UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    return cell.frame.size.height;

cell:正常处理。


3、apple最希望开发者这样做的:

height:

设置一个全局变量cell对象,自定义cell添加一个计算高度的方法-getHeight:和设置内容-setContent:的方法;

切记为了效率,在计算高度的方法中,尽量不要涉及赋值,算布局的复杂代码,只要能得到高度即可,越简单越好;因为height:该方法在reload的时候调用次数最多。

在设置内容方法中,只设置内容就可。


以上只是我想到的计算UITableView高度的方法,我个人觉得第三种最高效;

如果哪位大神有更好的方法,求赐教!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值