3

我想要在所選單元格下的所有單元格的y軸上偏移中心。我添加了一個屬性CollectionViewFlowLayout子類,名爲extendedCell,它標記的單元格下面我應該抵消其他一切。UICollectionViewFlowLayout子類會導致單元格消失

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 
{ 
    NSArray *attributes = [super layoutAttributesForElementsInRect:rect]; 
    if(!self.extendedCell) 
    { 
     return attributes; 
    } 
    else 
    { 
     return [self offsetCells:attributes]; 
    } 
} 

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewLayoutAttributes *attribute = [super layoutAttributesForItemAtIndexPath:indexPath]; 
    if(!self.extendedCell) 
    { 
     return attribute; 
    } 
    else 
    { 
     if(![attribute.indexPath isEqual:self.extendedCell] && 
      attribute.center.y >= [super layoutAttributesForItemAtIndexPath:self.extendedCell].center.y) 
     { 
      CGPoint newCenter = CGPointMake(attribute.center.x, 
              attribute.center.y + 180.f); 
      attribute.center = newCenter; 
     } 

     return attribute; 
    } 
} 

-(NSArray *)offsetCells:(NSArray *)layoutAttributes 
{ 
    for(UICollectionViewLayoutAttributes *attribute in layoutAttributes) 
    { 
     if(![attribute.indexPath isEqual:self.extendedCell] && 
      attribute.center.y >= [super layoutAttributesForItemAtIndexPath:self.extendedCell].center.y) 
     { 
      CGPoint newCenter = CGPointMake(attribute.center.x, 
              attribute.center.y + 180.0f); 
      attribute.center = newCenter; 
     } 
    } 

    return layoutAttributes; 
} 

結果發現有什麼不好的事情發生,底部的細胞消失了。我有一種感覺,這與內容大小不在UICollectionView之間的單元格有關,但在生成佈局時設置大小不起作用。任何想法如何解決這個失蹤?

回答

1

OK結果我發現了這個錯誤。似乎覆蓋 - (CGSize)collectionViewContentSize有幫助。如果任何單元格位於集合視圖的內容大小之外,它們就會消失。由於在任何佈局屬性調用之前內容大小已設置好,並且單元格不允許放置在其外部,因此集合視圖將被刪除。我認爲內容大小是基於單元屬性設置後的,但事實並非如此。

-(CGSize)collectionViewContentSize 
{ 
    if(self.extendedCell) 
    { 
     CGSize size = [super collectionViewContentSize]; 
     return CGSizeMake(size.width, size.height + 180); 
    } 
    else 
    { 
     return [super collectionViewContentSize]; 
    } 
} 
1

通過將大細胞分解成小細胞並將它們與視圖連接來解決這個問題。非常黑客,但iOS7將有望幫助。

0

檢查電池的任何返回的大小有邊界大小的一個等於0

在我的情況消失,原因是sizeForItem返回{} 320,0

Why UICollectionView with UICollectionViewFlowLayout not show cells, but ask for size?

而對於正確的尺寸圖從筆尖(使用自動佈局)我使用:

+ (CGSize)sizeForViewFromNib:(NSString *)nibName width:(CGFloat)width userData:(id)userData { 
     UIView *view = viewFromNib(nibName, nil); 
    [view configForUserData:userData]; 
    CGSize size = [view systemLayoutSizeFittingSize:CGSizeMake(width, SOME_MIN_SIZE) withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel]; 
    return CGSizeMake(width, size.height); 
} 
相關問題