2013-08-19 52 views
1

我目前正在更新一個我沒有自己創建的應用程序。UITableViewCell在哪裏放回隊列?

其中有一個高度自定義的表格視圖,用於水平滾動圖像,一次顯示3個圖像並啓用分頁。

問題是,它們有時會顯示爲白色,我認爲這是因爲它們在dequeueReusableCell仍然可見時返回。 (所以表視圖重用了由於仍然可見的單元格,因爲它仍然可見,所以不應該重複使用。)

由於該表格中通常不會有太多單元格,因此我嘗試了一種解決方法,即alloc和init的新單元格每一次,而不是出隊舊的,到目前爲止它工作正常(對於一個小桌子)。

但是,這不是一個好的解決方案,我想要做到「正確」的方式。

我不知道它是如何決定是否應將細胞放回隊列中。

我應該怎麼做才能阻止細胞排隊等待重複使用?

+0

是你的表視圖旋轉90度,以允許水平滾動? –

+0

是的。我正在使用這個https://github.com/alekseyn/EasyTableView – johnyu

+1

你是說當他們在屏幕上時他們是白色的,或者他們在屏幕上顯示圖像,然後在屏幕上變白時? –

回答

0

如果你真的不希望細胞被重複使用,按照你已經做過的方式去做。不建議不要重複使用UITableViewCells。重用技術可以節省內存。

但是,當你tableView是不是高度內存昂貴,這樣做。這是方式不「禁用」重用。

聽起來好像是因爲tableView旋轉了90°才能實現水平滾動。所以iOS認爲滾動的像素數量爲x,必須放置在屏幕外並且可以重複使用。這是我所設想的。

當您的更新地址爲iOS 6.0及更高版本時,我建議切換到UICollectionView,它與UITableView非常相似,但具有完全自定義流佈局的能力(這是您要谷歌的術語)。

當我的推測是正確的,另一種可能的解決辦法是使用兩個可重複使用的ID和替代他們,使細胞得到足夠的「空間」,以滾動:

if([indexPath row] % 2 == 0) { 
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierOne]; 
} 
else { 
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierTwo]; 
} 

但我真的唐現在,如果我對這個猜測:)

+0

我必須支持iOS 5. :(我現在也發現了這種情況,桌子比較大,當我滾動的速度足夠快時,所有3張圖片都變成了白色, – johnyu

+0

真的嗎?[這個版本分佈圖] [1]來自[Apple開發者資源] [2]可以幫助你說服你的客戶,以便你可以移動到iOS 6 :) [1]:https://devimages.apple.com.edgekey.net/devcenter/ios/checklist/images/chart.png [2]:https://developer.apple.com/devcenter/ios/checklist/ –

+0

但是,您的評論聽起來像圖像加載速度不夠快。它們是從web服務器加載的嗎? –