gpt4 book ai didi

ios - Swift - UITableView 滚动到底部很慢

转载 作者:搜寻专家 更新时间:2023-11-01 05:37:21 25 4
gpt4 key购买 nike

问题

滚动到 TableView 的底部很慢 TableView 包含大约 25 个项目创建每个单元格有点复杂所以同时创建其中的 25 个大约需要 200 毫秒(相信我,我无法再优化它了)

我尝试过的解决方案

基本上有两个滚动到 TableView 底部的选项(为此我已经搜索了整个堆栈)

  1. tableView.scrollRectToVisibletableView.setContentOffset
  2. tableView.scrollToRowAtIndexPath

第一个选项的问题是,虽然它非常快并且不会重新创建 tableView 从上到下的每个单元格,但我需要调用一个新的主队列才能让它工作。如果我在与调用 tableView.reloadData() 的队列相同的队列中调用它,那么在滚动 tableview 时会出现奇怪的延迟(日志显示许多单元格被不必要地重新创建,我的意思是很多)。让我补充一点,这两个线程都是主线程。但我仍然必须调用 dispatch_get_main_queue() 来摆脱这种尴尬的延迟。然而,新的主线程为初始加载增加了一个很好的延迟。
这是我的代码:

func loadData(groupID: String){
self._chats = self._cache[groupID]!
_tableView.reloadData()
dispatch_async(dispatch_get_main_queue()) {
let rect = CGRect(x: 0, y: self._tableView.contentSize.height - self._tableView.bounds.height, width: self._tableView.contentSize.width, height: self._tableView.bounds.height)
self._tableView.scrollRectToVisible(rect, animated: false)
}
}

同样,如果我不使用 dispatch_get_main_queue(),tableView 会非常迟钝。如果我确实使用它,那么执行会有大约 100 毫秒的延迟,这会使初始加载变慢。

第二个选项也很慢,因为滚动到最后一个 indexPath 意味着在途中创建每个单元格。这不可能在后台发生,在主线程中执行这意味着卡住 UI 大约 200 毫秒。

您能否建议任何其他解决方案或发现我正在做的事情有问题?我已经尝试了所有方法,但 tableView 仍然不够快。

最佳答案

您可以使用 Xcode Instruments 之一的 Time Profiler 来了解您的应用堆栈在哪个进程上。

关于ios - Swift - UITableView 滚动到底部很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35408564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com