ios - 无法将 TableView 平滑地动画化到底部插入的新单元格

标签 ios swift uitableview core-data uiscrollview

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

我有一个 TableView ,它实现了 NSFetchedResultsControllerDelegate 协议(protocol),在屏幕上显示新值。

值总是一个接一个出现,并且总是插入到表格的底部。

单元格的大小可变。

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

我有以下代码:

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

我在设置 View 内容之前计算大小。通过这种方式,表格根据单元格的实际大小计算滚动。 我希望它有所帮助。 遗传算法

关于ios - 无法将 TableView 平滑地动画化到底部插入的新单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32081228/

相关文章:

iphone - 在应用程序保存中拍照

javascript - UIWebview 如何在 iOS 中进行渲染?

swift - Swift 或其他语言中 Optionals 的术语

ios - 从 CoreData 填充的自定义 tableView,提供额外的白色单元格

ios - 修复 UITableView 中第一行的纵横比

ios - 如果从另一个类调用 removeFromSuperview 则不起作用

ios - Collectionview 和分页

ios - UICollectionViewLayout 子类中未调用 layoutAttributesClass

ios - Storyboard中设置的 UITableViewCell 的恢复 ID 和标识符之间有什么区别

ios - 从 FIREBASE 嵌套的子节点中捕获信息到一个数组中,并将其传递给下一个 ViewController XCODE