簡體   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