【问题标题】:ScrollToRowAtIndexPath is taking too much timeScrollToRowAtIndexPath 花费了太多时间
【发布时间】:2017-09-20 14:18:56
【问题描述】:

我正在尝试滚动表格以显示最后一个单元格。我正在使用scrollToRowAtIndexPathbottom 方法,但这需要太多时间。我该如何解决这个问题?

【问题讨论】:

  • 您的cellForRowAtIndexPath 可能用时过长,您在里面做什么?
  • 你是在主队列中做的吗?
  • 使用分析器运行您的应用程序,看看什么会花费太多时间,然后修复它。
  • @JonSnow 你可以从主线程中调用 scrollToRowAtIndexPath 吗? :)
  • 显示一些代码。你到底在做什么?

标签: swift uitableview


【解决方案1】:

要使用自定义时间制作动画,您可以使用以下代码:

tableView.layoutIfNeeded()
var offset = tableView.contentSize.height

let offsetPoint = CGPoint(x: 0, y: offset)

UIView.animate(withDuration: 0.1, animations: {
    tableView.setContentOffset(offsetPoint, animated:false)
})

然后您可以将 0.1 替换为您想要为滚动设置动画的秒数。

编辑:

如果你不想要任何动画你也可以试试:

let lastSectionIndex = tableView.numberOfSections() - 1
let lastRowIndex = tableView.numberOfRows(inSection: lastSectionIndex) - 1

tableView.scrollToRow(at: IndexPath(row: lastRowIndex, section: lastSectionIndex), at: .top, animated: false)

【讨论】:

  • 如果行有不同的高度怎么办?
  • 好的。已编辑答案,假设您使用的是UITableViewAutomaticDimension
  • 这看起来像是对 UITableView.rectForRow(at:) 的缓慢重新实现。
  • 好的。我认为粗略的想法是获取表格视图的高度 - 我希望此编辑可以解决速度问题。
  • 您的编辑更适合这种特定情况,但可能不需要强制布局。我可能会改用rect(forSection),以便表格视图可以决定什么需要和不需要布局。 (但我怀疑这不是 OP 的问题;可能是错的,但我猜是别的问题。)
猜你喜欢
  • 2017-02-15
  • 2020-07-23
  • 2013-07-11
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多