You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UITableView客户端分页实现异常问题咨询

解决UITableView快速滚动导致本地分页逻辑异常的问题

老哥,这个问题我太熟了!快速滚动时分页逻辑乱掉,核心原因就是willDisplayCell在快速滑动时会被多次触发——当用户飞快滑到底部,同一个(甚至多个)接近底部的单元格会反复触发这个方法,导致你的offset、page被重复累加,getMore25DataFromMainAry也会被调用N次,结果就是数据重复加载、分页计数混乱。

我给你两个关键修复步骤,彻底解决这个问题:

1. 新增「加载状态锁」,防止重复触发加载

你需要加一个布尔变量标记当前是否正在加载数据,只有在未加载时才允许触发新的加载逻辑。

第一步:定义状态变量

在你的ViewController里添加这个属性:

@property (nonatomic, assign) BOOL isLoadingMore; // 标记是否正在加载更多数据

第二步:修改willDisplayCell的触发条件

在原有判断的基础上,加上!self.isLoadingMore的限制,确保同一时间只有一次加载操作:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if(tableView == self.tblForList) {
        // 新增「不在加载中」的判断,避免重复触发
        if (!self.isLoadingMore && indexPath.row == self.arrForList.count - 1 && self.arrForList.count < self.arrForMainList.count) {
            self.isLoadingMore = YES; // 上锁,标记为正在加载
            self.offset += self.limit;
            self.page++;
            [self getMore25DataFromMainAry];
        }
    }
}

第三步:在加载完成后解锁

不管你的getMore25DataFromMainAry是本地截取数据还是有异步操作,都要在数据处理完成后重置isLoadingMore为NO:

- (void)getMore25DataFromMainAry {
    // 从主数组截取需要的分页数据
    NSInteger startIndex = self.offset - self.limit;
    if (startIndex < 0) startIndex = 0;
    NSInteger endIndex = MIN(self.offset, self.arrForMainList.count);
    NSArray *newData = [self.arrForMainList subarrayWithRange:NSMakeRange(startIndex, endIndex - startIndex)];
    
    // 更新列表数据源并刷新表格
    [self.arrForList addObjectsFromArray:newData];
    [self.tblForList reloadData];
    
    // 加载完成,解锁
    self.isLoadingMore = NO;
}

2. 可选优化:调整触发时机(非必须,但体验更好)

如果想让触发时机更合理,可以把触发点提前到距离底部还有1-2个cell的位置,避免用户滑到底部才加载(尤其是数据量较大时):

// 修改触发条件为「距离底部还有2个cell时触发」
if (!self.isLoadingMore && indexPath.row >= self.arrForList.count - 2 && self.arrForList.count < self.arrForMainList.count) {
    // 加载逻辑...
}

这样修改后,不管用户怎么快速滚动,都不会出现重复触发分页逻辑的问题了,因为每次加载都会上锁,直到本次加载完成才会允许下一次触发。

内容的提问来源于stack exchange,提问作者Drashti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:19:45