Ios 无法将表格视图平滑地设置为在底部插入的新单元格的动画

Ios 无法将表格视图平滑地设置为在底部插入的新单元格的动画,ios,swift,uitableview,core-data,uiscrollview,Ios,Swift,Uitableview,Core Data,Uiscrollview,我有一个Swift应用程序,它每隔几秒钟生成一次信息,并将其添加到ManagedObjectContext中 我有一个tableview,它实现了NSFetchedResultsControllerDelegate协议,在屏幕上显示新值 这些值总是一个接一个地出现,并且总是插入到表的底部 单元格大小可变 我需要的是保持平滑滚动到新插入的单元格,就像在消息传递应用程序中一样 我有以下代码: func controllerWillChangeContent(controller: NSFetched

我有一个Swift应用程序,它每隔几秒钟生成一次信息,并将其添加到ManagedObjectContext中

我有一个tableview,它实现了NSFetchedResultsControllerDelegate协议,在屏幕上显示新值

这些值总是一个接一个地出现,并且总是插入到表的底部

单元格大小可变

我需要的是保持平滑滚动到新插入的单元格,就像在消息传递应用程序中一样

我有以下代码:

func controllerWillChangeContent(controller: NSFetchedResultsController) {
    self.tableView!.beginUpdates()
}

func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
    self.tableView!.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .None)
    self.insertedIndexPath = newIndexPath
}

func controllerDidChangeContent(controller: NSFetchedResultsController) {
    self.tableView!.endUpdates()
    self.tableView!.scrollToRowAtIndexPath(self.insertedIndexPath!, atScrollPosition: .None, animated: animated)
}
代码运行良好,但当表中有许多行时,滚动动画会在插入的每一新行中上下跳跃

有人知道如何使动画平滑地运行到新行吗

谢谢


我已经找到了解决问题的办法。问题是我使用的是自动调整大小

self.tableView!.rowHeight = UITableViewAutomaticDimension
self.tableView!.estimatedRowHeight = 150
我的表格单元格的大小可能会非常不同,自动调整大小始终会开始将单元格调整为估计值。在添加新单元格之前,表格会自动滚动到根据估计值计算的位置。由于平均大小可能如此多变,因此估计的表格滚动位置总是错误的,这会使滚动条疯狂地上下移动。 为了解决这个问题,我设置了以下方法:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
我在设置视图内容之前计算大小。通过这种方式,表格根据单元格的实际大小计算滚动。 我希望有帮助。
我已经找到了解决问题的办法。问题是我使用的是自动调整大小

self.tableView!.rowHeight = UITableViewAutomaticDimension
self.tableView!.estimatedRowHeight = 150
我的表格单元格的大小可能会非常不同,自动调整大小始终会开始将单元格调整为估计值。在添加新单元格之前,表格会自动滚动到根据估计值计算的位置。由于平均大小可能如此多变,因此估计的表格滚动位置总是错误的,这会使滚动条疯狂地上下移动。 为了解决这个问题,我设置了以下方法:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
我在设置视图内容之前计算大小。通过这种方式,表格根据单元格的实际大小计算滚动。 我希望有帮助。
GA

在制作动画之前,是否尝试将表视图的内容大小更新为新大小?看看这是否有助于在insertRowsAtIndexPaths之后自动更新内容大小?您找到解决方案了吗?我也有同样的问题。在制作动画之前,是否尝试将表视图的内容大小更新为新的大小?看看这是否有助于在insertRowsAtIndexPaths之后自动更新内容大小?您找到解决方案了吗?我也有同样的问题。如果heightForRowAtIndexPath包含返回块,您能提供实现吗?如果heightForRowAtIndexPath包含返回块,您能提供实现吗?