2012-11-19 123 views
14

我在Storyboard(iPad)中定義了一個包含UICollectionView的視圖,在視圖的底部還有一個UIToolbar。 在UICollectionView中,我添加了一個UICollectionViewCell(由iPadCellCollectionViewCell類實現),其中包含另一個視圖,即Core-Plot圖(CPTGraphHostingView類)。UICollectionView的單元格在滾動後並不總是被刷新

我有一個名爲X的類,實現了UICollectionViewDelegateUICollectionViewDataSource

在類X,我建立我的視圖的每個單元(在ViewDidLoad)核心-散點圖和我有以下代碼到圖形鏈接到的UICollectionViewCell

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
static NSString* cellId = @"ChartCollectionId"; 

iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath]; 

MyChart* chart = [_charts objectAtIndex:indexPath.row]; 

cell.hostingView.hostedGraph = chart.barChart; 

return cell; 

}小區

它工作正常,所有我的圖形都正確顯示在屏幕上。當用戶滾動視圖時,會發生該問題,然後一個或多個單元格變爲「空白」。我真的不明白爲什麼。

我已經找到了解決辦法,而不是在Interface Builder中UICollectionViewCell加入CPTGraphHostingView,我建立它自己和以前的代碼變成:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
static NSString* cellId = @"ChartCollectionId"; 

iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath]; 


[cell.contentView addSubview:[_hostingViews objectAtIndex:indexPath.row]]; 

return cell; 

}

有了這個代碼一切工作正常。有沒有任何解釋爲什麼當我用IB添加CPTGraphHostingViewUICollectionViewCell時它不起作用?

每次調用方法時調用「addSubview」是個問題嗎?沒有內存泄漏?

回答

3

這似乎使用sectionInsets時處於UICollectionView的錯誤。 單元格不會隱藏,它們在快速滾動時有時會出錯。

因此,如果您通常每行有3個項目,您將在第一行中獲得第四個項目,但在下一行的第一個項目中沒有項目。

如果您將UICollectionView設置爲不剪裁到邊界,並將其移動到UI的頂部 ,則可能會看到此未對齊的單元。

我的解決方案到目前爲止不使用sectionInsets,並通過使用contentInset和節頭中的一些空白空間來包圍它。

我還在Twitter上發現了其他一些人,他們遇到了同樣的問題。 還有一個關於它的錯誤報告:12353513

+0

我在哪裏查看錯誤報告? – bandejapaisa

9

我也有過類似的問題。我通過在我的自定義內容上調用setFrame:時強制重繪來修復它。

-(void)setFrame:(CGRect)frame { 
    [super setFrame:frame]; 
    [self setNeedsDisplay]; // force drawRect: 
} 

編輯:在你的情況下,子類CPTGraphHostingView和覆蓋此方法更簡單的方法來刷新細胞意見時,他們被重用是覆蓋applyLayoutAttributes:iPadCellCollectionViewCell如下:

-(void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes { 
    // apply custom attributes... 
    [self.hostingView setNeedsDisplay]; // force drawRect: 
} 

關於你的解決方法:在內容視圖中會有越來越多的子視圖,這可能不是一件好事。但是,如果您在添加新的子視圖之前刪除了任何舊的子視圖,那應該也可以。

+2

我在水平滾動時出現錯誤位置的單元格時出現同樣的問題,但不幸的是,這兩個修補程序都不適用於我。 –

+0

偉大的,嘗試了兩種方法,都工作。 – anka

+0

感謝第二個選項爲我工作 – slik

相關問題