UITableView与estimatedRowHeight弹跳

我在xib中使用autoLayout作为我的customCell,因为我希望基于文本的行具有可变的高度。

现在在我的VC.m

我正在使用这些代码行

- (void)viewdidLoad { m_tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; m_tableView.estimatedRowHeight = 97.0; m_tableView.rowHeight = UITableViewAutomaticDimension; } 

这里是我的cellForRow函数

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; CustomCell *tableCell = (NotesCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (tableCell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; tableCell = [nib objectAtIndex:0]; } // Configure the cell... //This code is used to make the separator full width. Also the tableview separator insets should be set to zero tableCell.layoutMargins = UIEdgeInsetsZero; tableCell.preservesSuperviewLayoutMargins = NO; return tableCell; } 

所以现在每当我更新一行时,我都会调用这些代码行

 [m_tableView beginUpdates]; [m_tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:m_indexPath] withRowAnimation:UITableViewRowAnimationFade]; [m_tableView endUpdates]; 

当我这样做的时候,Tableview只是反弹。 我不知道什么是错的

关心Ranjit

这是因为当你重新加载你的单元格时,表格视图再次要求所有单元格的高度。 任何超出滚动位置的单元格将被要求估计的行高,如果它们与当前高度不同,则会导致单元格改变高度,您将看到表格反弹。

一旦你的单元格的高度计算出来,你应该在某处caching该值,然后实现tableView:estimatedHeightForRowAtIndexPath:并返回单元格的实际高度,如果它们有一个而不是估计的高度。

您应该使用dequeueReusableCellWithIdentifier:forIndexPath而不是您正在使用的版本。

你正在使用的那个将没有尺寸类,因为返回的单元格没有父类。 由于尺寸级别的变化,从xcode 6开始出现一个问题。

尝试更改为这个版本,该版本返回表格的一部分,从而inheritancesuperviews的traitCollection并帮助布局正常工作。