endUpdates
触发内容大小重新计算,这需要heightForRowAtIndexPath
. 这就是它的工作原理。
如果这是一个问题,您可以将您的单元配置逻辑拉到外部cellForRowAtIndexPath
并直接重新配置单元,而无需通过reloadRowsAtIndexPaths
. 以下是这可能看起来的基本轮廓:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellId = ...;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}
[self tableView:tableView configureCell:cell atIndexPath:indexPath];
return cell;
}
- (void)tableView:(UITableView *)tableView configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
//cell configuration logic here
}
然后,无论您当前在哪里调用reloadRowsAtIndexPaths
,您都可以这样做并且heightForRowAtIndexPath
不会被调用:
UITableViewCell *cell = [self.messageTableView cellForRowAtIndexPath:indexPath];
[self tableView:self.messageTableView configureCell:cell atIndexPath:indexPath];