2014-05-10 36 views
0

我試圖繼承UICollectionViewFlowLayout的子類,以便我可以消除單元格之間的空間,因爲流佈局只允許您設置minimumInterItemSpacing而不是maximumInterItemSpacing。我需要一個與動態單元格高度垂直滾動的collectionView,並在單元格之間有空間。以下是我在我的UICollectionViewFlowLayout子曾嘗試:UICollectionView與零interItemSpacing

- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect { 
    NSArray *answer = [[super layoutAttributesForElementsInRect:rect] mutableCopy]; 

    for(int i = 1; i < [answer count]; i++) { 
     UICollectionViewLayoutAttributes *currentLayoutAttributes = answer[i]; 
     UICollectionViewLayoutAttributes *prevLayoutAttributes = answer[i - 1]; 
     NSInteger maximumSpacing = 0; 
     NSInteger origin = prevLayoutAttributes.frame.origin.y + prevLayoutAttributes.frame.size.height; 
     if(origin + maximumSpacing + currentLayoutAttributes.frame.size.height < self.collectionViewContentSize.height) { 
      CGRect frame = currentLayoutAttributes.frame; 
      frame.origin.y = origin + maximumSpacing; 
      currentLayoutAttributes.frame = frame; 
     } 
    } 
    return answer; 
} 

雖然這似乎消除interitem間距,它也產生奇怪的副作用。一些細胞結束的方式太高,另一些細胞大小跳躍。另外,如果我滾動的速度非常快,一些單元格根本不會顯示出來。有誰知道我能如何最好地實現這個看似簡單的事情?

由於

+0

您是否每行有多個單元格,還是像堆疊一樣堆疊在一起? – jrturton

+0

這裏的問題是,即使您在該矩形中移動項目的位置,您仍然可以爲特定矩形返回相同數量的佈局屬性對象,因此您可以在其中放入額外的單元格 - 這就是爲什麼您會看到空白 – jrturton

回答

0

您需要關於佈局中設置一個minimumLineSpacing

對於垂直滾動網格,該值表示連續行之間的最小間距。對於水平滾動網格,此值表示連續列之間的最小間距。此間距不適用於標題和第一行之間或最後一行和頁腳之間的空間。

你設置minimumInterItemSpacing,這是在同一行中的項目:

對於垂直滾動的網格,該值表示在同一行中的項目之間的最小間距。對於水平滾動網格,此值表示同一列中各項目之間的最小間距。這個間距用於計算一條線上可以放入多少物品,但是在物品數量確定之後,實際間距可能會向上調整。

您當前的問題是因爲您正在將物品移動到傳遞給佈局的矩形中,以便您可以在其中放入更多物品,但是您並未添加額外物品來填充該空間,所以您看到差距。但是,您不需要重寫此操作,只需設置行間距屬性即可。