UITableView beginUpdate/endUpdate导致滚动到顶部

mic*_*yen 20 uitableview uitextview ios

我一直在试图解决这个非常普遍的问题,即UITextView在一个不断增长UITableViewCell的内部扩张UITableView,除了一件小事,我几乎就在那里.

我有UITableView一个习惯UITableViewCell.我UITableView正在使用新的iOS8自动调整动态单元格高度,self.tableView.estimatedRowHeightself.tableView.rowHeight = UITableViewAutomaticDimension;根据它的ContentView的自动布局增加单元格高度.

我可以正确地扩展我UITextField的框架,我UITableView的单元格高度确实增长了,但每次调用self.tableView beginUpdates和匹配时endUpdates,tableView的整个滚动视图都会强制滚动到表格视图的顶部.我有一个滚动到插入符号位置的方法,但是你可以想象,每次在UITextView中创建一个新行时,UITableView会滚动到最顶部,然后滚动到插入符号位置,它就像地狱一样笨拙.

有人有主意吗?如有必要,我可以提供视频.干杯,迈克

aki*_*irs 29

这也让我受益,看起来self.tableView.estimatedRowHeight就是问题所在.当我估计得足够大时,问题就不复存在了.

我添加了这个,它到目前为止运作良好:

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
}
Run Code Online (Sandbox Code Playgroud)

  • 我使用1000的值,它的工作原理.我担心使用UITableViewAutomaticDimension,因为它似乎用于通过实际行高度返回值(tableView.rowHeight或tableView:heightForRowAtIndexPath :)来指示系统应该使用estimatedRowHeight来确定单元格的大小,然后自动布局有机会计算尺寸.似乎在你的情况下它可能只是巧合.调试器中的值为-1,它对我不起作用. (8认同)
  • 它偶尔会滚动到顶部. (4认同)
  • 同时使用相同的estimatedHeight和heightForRow方法解决了我的问题 (3认同)
  • 这是令人难以置信的王者.谢谢. (2认同)

小智 6

我不能评论akiraspeirs的答案,但任何调整大小之前设置self.tableView.estimatedRowHeight到我的单元格的确切高度摆脱了奇怪的滚动问题.他的第二个解决方案在我的案例中没有用.