繁体   English   中英

Swift-UITableView滚动到底部很慢

[英]Swift - UITableView scroll to bottom is slow

问题

滚动到表格视图的底部很慢,表格视图包含大约25个项目,创建每个单元格有点复杂,因此,同时创建25个单元格大约需要200毫秒(相信我没有办法进一步优化)

我尝试过的解答

基本上有两个选项可滚动到表格视图的底部(为此,我在整个流程中搜索了整个堆栈)

  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来了解您的应用堆栈在哪个进程上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM