簡體   English   中英

UITableView具有隨機消失的單元格

[英]UITableView has randomly disappearing cells

我有一個相當簡單的UITableView,它使用航班預訂的NSArray,並且每個預訂顯示一個單元格。 最近,客戶提出了一個問題(我只能偶爾復制),其中一些單元格被完全隱藏了。 他們的空間就在那里,但應該有一個空隙。

該表具有頁眉和頁腳,因此我可以看到間隙(不僅僅是元素更少)。

此處的示例屏幕截圖: http : //myflightsapp.com/images/missing-cells.png

這確實是斷斷續續的,因為如果我重新啟動應用程序,問題就消失了。

我嘗試用非常簡單的2襯里替換cellForRowAtIndexPath,以返回帶有文本標簽的完全標准的UITableViewCell,並且它顯示相同的問題,因此對我來說,排除Nib / Custom類是問題。

heightForRowAtIndexPath始終返回一個常量,因此不會誤顯示高度為零的行。

桌子上只有1個部分。

我將debug放入numberOfSectionsInTableView方法中,並且它始終返回正確的數字(在此示例中為2)

我將debug放在cellForRowAtIndexPath中,從中學到了:1)如果我將表格視圖拖動到足夠高的位置(因此單元格從屏幕上消失了),然后在問題顯示的情況下再次放開它,當表滾動回視圖時,不會再次調用cellForRowAtIndexPath嘗試重繪單元格,但是當問題不存在時(即,所有單元格都可見),它會為每個單元格再次調用cellForRowAtIndexPath。

2)任何單元都絕對不具有“隱藏”屬性。

通過在其他地方添加調試(例如,臨時按鈕),我可以手動為未顯示的單元格調用cellForRowAtIndexPath方法,並且它返回似乎有效的單元格。

所以我的問題是,什么會導致我看到的問題? 我沒有足夠的地方進行調試,以查看問題所在。

非常感謝您的幫助-我想念的是什么?

可能導致此問題的原因是您沒有足夠的單元可重復使用。 我沒有看到您的代碼,只是在推測,但是這可能會導致您的問題:

假設您的桌子高100點,每個單元格是10點。 然后,在任何給定時間,您的表都會在內存中顯示當前正在查看的10(或11)個單元格,以及上方的10個看不見的單元格和下方的10個看不見的單元格。 因此,該表具有大約30個創建的單元格,然后反復使用。

在某些情況下,似乎沒有足夠的單元格可重用。

關於如何為您“解決”情況的幾點想法:

  1. 當表視圖contentOffset.y變化大於表視圖frame.size.height時,請使用[myTableView reloadData] 這將調用要重新創建的視圖中的單元。 我不建議使用此方法,因為如果需要重新創建大量數據或大量單元,該方法可能會很激烈。
  2. 查找實際創建了多少個單元格。 您可以在每個單元格中添加標簽,並在每次進入單元格時進行記錄。 這可以使您更好地了解如何重用單元格。
  3. 根據所需的單元格數量,可以創建每個單元格,將其加載到數組中,然后為cellForRowAtIndexPath返回唯一的單元格。 根據您所需的單元數,我認為這可能是您的最佳選擇。

在Apple Dev技術支持的幫助下,...已解決。 為了讓遇到的其他人受益,原因是我不小心調用了從輔助線程而不是在主線程上重新加載表的方法。

為了解決這個問題,我使用了以下方法

[self performSelectorOnMainThread:@selector(refreshMethod) withObject:nil waitUntilDone:YES];

到目前為止,一切都很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM