使用自动布局扩展单元格时,UITableView会跳转。

时间:2016-03-23 20:52:55

标签: ios objective-c uitableview uiscrollview contentoffset

我一直在搜索,无法找到解决此问题的方法。我目前的代码基于Reload section without reloading section header

我试图在用户按下单元格时生成一个uitableview单元格。我有一个带UILabel的UITableViewCell子类,最初只限于两行文本。当用户按下UILabel时,我将UILabel中的numberOfLines属性设置为0,因此它会根据需要扩展为多行。

这是我在tableView中的代码:didSelectRowAtIndexPath:

if (((NSNumber *)expandedCells[indexPath.section]).boolValue)
{
     labelExpandingCell.cellLabel.numberOfLines = 10;
} else
{
     labelExpandingCell.cellLabel.numberOfLines = 3;
}
[UIView setAnimationsEnabled:NO];
[self.tableView beginUpdates];
[self.tableView setNeedsDisplay];
[self.tableView endUpdates];
[UIView setAnimationsEnabled:YES];

有时这种方法很好,通常在UITableView的contentOffset.y == 0时。通常,当我执行此代码时,tableview会向后跳转100像素左右。以下是运行此代码之前和之后的示例日志。

2016-03-25 14:57:08.549 TableViewTest [485:129926]更新前的内容偏移量:153.500000 2016-03-25 14:57:08.568 TableViewTest [485:129926]更新后的内容偏移量:136.500000

当我展开当前可见的单元格时,为什么autolayout会导致我的tableview向后跳?

2 个答案:

答案 0 :(得分:5)

我通过在tableview的委托中实现estimatedHeightForRowAtIndexPath方法来修复此问题。我认为问题是tableview没有正确估计我的tableview中前面部分的高度而没有实现这个方法,因此当我更新tableview中的一个部分时跳转。

答案 1 :(得分:0)

您是否设置了UITableView

tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = DEFAULT_ROW_HEIGHT

如果是,请检查确保您的UILabel约束已正确应用于单元格。 你可以避免实现" estimatedHeightForRowAtIndexPath"方法,如果您设置上述两个属性。