2015-09-23 34 views
2

親愛的同學程序員,IOS 9 - 調用的cellForRowAtIndexPath時

我最近更新的Xcode 7和斯威夫特2,現在,每當我滾動向上或向下滾動/掉電時的tableview細胞跳躍,畫面跳一點點(沒有太瘋狂),但它使導航laggy。 只要我在屏幕上顯示一個新的單元格,就會發生這種情況cellForRowAtIndexPath被調用。

cellForRowAtIndexPath,對於每個單元我實際上使用HanekeSwift,Labels和Buttons(使用switch,case,if等等)設置一堆imageView。

奇怪的部分是,只要我在cellForRowAtIndexPath中評論大部分設置,跳躍部分就消失了。

我試過評論每個部分,但我沒有設法檢測什麼是負責跳轉部分。或者我想知道這是否與治療有很多相關。

每個單元格的高度都不同,我使用自動佈局來檢測每個單元格的高度。 timelineTableView.rowHeight = UITableViewAutomaticDimension timelineTableView.estimatedRowHeight = 600

我還試圖執行estimatedHeightForRowAtIndexPath委託方法和手動計算每個小區的但沒有成功的高度。

任何人都有一個想法,爲什麼我遇到了跳動的部分,爲什麼當我評論所有的東西,跳了沒有?

更新1: 而與時間探查(註釋掉我的cellForRowAtIndexPath方法的一些功能)播放時,我意識到,當的cellForRowAtIndexPath的運行時間比80-90ms下,我沒有看到跳動的部分。此外,運行時間越長,我越覺得跳躍

+0

在設備上運行時,在儀器中使用時間分析器來查找慢速線。但這是一個在細胞製備方法中要做的工作!通過根據設備尺寸進行切換,您也擊敗了自動佈局的要點:) – jrturton

+0

您是否認爲這可能與以下事實有關:這是一個很多細胞製備的事實?我有選擇嗎?我必須爲每個Cell設置所有這些。 – fabdarice

+0

並非所有人都需要每次都做。但用儀器找到你的慢碼,不要猜測。 – jrturton

回答

1

根據您的儀器跟蹤,創建和設置按鈕圖像幾乎是所有的時間。看起來像這樣:

// Approve Button && Disapprove Button 
    if selfie.user_vote_status == 1 { 
     self.approveButton.setImage(UIImage(named: "approve_select_button.png"), forState: .Normal) 
     self.disapproveButton.setImage(UIImage(named: "reject_button.png"), forState: .Normal) 
    } else if selfie.user_vote_status == 2 { 
     self.approveButton.setImage(UIImage(named: "approve_button.png"), forState: .Normal) 
     self.disapproveButton.setImage(UIImage(named: "reject_select_button.png"), forState: .Normal) 
    } else { 
     self.approveButton.setImage(UIImage(named: "approve_button.png"), forState: .Normal) 
     self.disapproveButton.setImage(UIImage(named: "reject_button.png"), forState: .Normal) 
    } 

您可以先通過註釋掉這部分代碼來測試。

要解決這個問題,你需要做兩件事。首先,看看整個方法,並嘗試找出每次重複哪些事情。這些東西需要被移入一個初始化程序或被設置在故事板中,而不是每次運行時都被擊中。

其次,沒有必要繼續創建和分配這些圖像。批准按鈕具有兩個圖像中的一個,不同意按鈕具有兩個圖像中的一個。您可以爲選擇一個圖像狀態,併爲正常狀態設置一個圖像(一次,在故事板或初始化程序中),然後根據投票狀態設置按鈕的選定狀態。

+0

首先,非常感謝您的幫助! 你可以擴展一下關於遷移到一個初始化程序嗎?就像將每個Cell的所有代碼放入awakeFromNib方法一樣? – fabdarice

+0

可以,或者將其設置在筆尖或故事板本身中。 – jrturton

+0

根據你的建議,我設法將cellForRowAtIndexPath的所有內容從400ms減少到120ms,但是,似乎不能達到90ms以下。還有其他建議嗎?我有點驚訝,雖然一些簡單的治療會導致這一點,因爲我沒有做任何瘋狂的事,只是設置圖像和標籤:( – fabdarice

相關問題