我有一個數組,集合視圖在創建單元格時使用數組中的數據。我在數組的開頭添加一些對象,當我的collectionview幾乎在頂部。我使用這種方法來確定其時間來加載新項目&部分並添加他們在滾動到頂部時在表視圖的開始處動態添加行
-(void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section < sectionLimitBeforeLoadingMoreSections)
{
// add some objects at the beginning of the array
}
}
,但我可以很容易地使用其他方法(即scrollViewDidScroll)。
所以我有一個問題,當我將項目添加到數組和reloadData中時,我的集合視圖contentOffset不會被更改,因此一旦調用此方法,它會越來越多地被調用,並使得CPU無限工作@ 100%。
例如:我有20個部分,初始位置是中心部分(10)。我開始滾動到頂部,當我到達第4部分時,還有10個項目被添加到數組中(這意味着將出現10個部分)。所以第4節現在必須成爲第14節。所以它確實如此,但我的scrollView contentOffset不會改變,並且新的Section 4立即可見,因此它再次調用此方法以添加10個項目等等。
當我使用此方法在數組末尾添加對象時,它工作正常。部分添加在底部,我滾動得很好。
我想到了一個解決方案來確定所有添加的新節的高度,並將此值添加到當前的contentOffset,但我看不出如何計算高度。
更新:
if(indexPath.section < sectionLimitBeforeLoadingMoreSections) // load @ beginning
{
if(!self.isLoading)
{
self.isLoading = YES;
CGFloat height = self.contentSize.height;
[self performBatchUpdates:^
{
[self loadNewMonthsAtTheBeginning:10];
[self insertSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 10)]];
}
completion:^(BOOL finished)
{
self.contentOffset = CGPointMake(self.contentOffset.x,self.contentOffset.y + self.contentSize.height - height);
self.isLoading = NO;
}];
}
}
似乎運作良好,但我得到一點點凍結執行批處理時,沒有辦法避免這種情況?
你解決問題了嗎?我面對同一個。 – 2015-07-14 21:26:11