2012-12-25 97 views
0

我目前在xcode中測試一個UICollectionView只有一個水平行像一個封面流。基本上我有我自己的自定義單元格類和單元格的xib文件,然後在每個單元格上添加另一個具有xib的UIView。如果你想知道爲什麼,這是我可以添加不同的UIViews到單元格。現在我只添加一個。UICollectionViewCells與UICollectionViewFlowLayout - 奇怪的佈局發生

編輯我跟隨了WWDC 2012視頻創建UICollectionViewCell的一個linelayout,但有一處不同。而不是在中間的細胞變得越來越大,所有其他細胞變得更小。

以下全部內容對我的問題而言是新的。

-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { 

NSArray *array = [super layoutAttributesForElementsInRect:rect]; 
CGRect visibleRect; 
visibleRect.origin = self.collectionView.contentOffset; 
visibleRect.size = self.collectionView.bounds.size; 

    for (UICollectionViewLayoutAttributes *attributes in array){ 

    if (CGRectIntersectsRect(attributes.frame, rect)) { 
     CGFloat distance = CGRectGetMidX(visibleRect) - attributes.center.x; 
     CGFloat normalizedDistance = distance/ACTIVE_DISTANCE; 
     if (ABS(distance) < ACTIVE_DISTANCE) { 
      //THIS WOULD MAKE THE MIDDLE BIGGER 
      //CGFloat zoom = 1 + ZOOM_FACTOR *(1- ABS(normalizedDistance)); 
      //attributes.transform3D = CATransform3DMakeScale(zoom, zoom, 1.0); 
      //attributes.zIndex = round(zoom); 
     } else { 
      //THIS MAKES ALL THE OTHERS NOT IN THE RECT SMALLER 
      CGFloat zoom = 1 + ZOOM_FACTOR *(1- ABS(normalizedDistance)); 
      attributes.transform3D = CATransform3DMakeScale(zoom, zoom, 1.0); 
      attributes.zIndex = round(zoom); 
     } 
    } 
} 

return array; 

}

該問題可以附加圖像中可以看出。

Reused cell not resizing

粉紅=集合視圖尺寸

布朗=細胞大小

綠色=細胞內容大小和一個附加的XIB到內容的尺寸。

我想我的問題是佈局。當出售出售時,通過上面的代碼使其變小。然後,當它被重用時,CELL會再次變大,但內容視圖不會。

我已經厭倦了手動設置內容視圖的框架,但是什麼都不做。

更新1:這也只發生在我添加一個xib到單元格內容視圖。如果沒有子視圖的內容視圖,那麼沒有問題

UPDATE 2:它似乎是細胞的子視圖,我的xib沒有調整大小。我試圖手動改變其框架大小,但唯一有用的地方在於單元格拉伸方法,這對我來說就像是一種黑客攻擊。

回答

0

我的回答是非常具體的,我不相信這將幫助任何人。

問題是我對灰色視圖的底部有一個限制。在我將這個約束更改爲小於或等於它之後,出於某種原因,它工作。

現在我知道這並不能解釋爲什麼它不會發生在每個單元格上,但它解決了我的問題。

正如哈爾斯的答案也值得一看,如果你在搜索後登陸這裏。

編輯:有也似乎是一些錯誤的6.0 UiCollectionView控制器,它似乎固定在6.1

1

重用細胞無法重繪自己所以從UICollectionView的cellForItemAtIndexPath給調用

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

。 也看看this link

question

+0

謝謝苛刻。雖然我認爲你的答案很好,並且在這種情況下可能會有所幫助,並且我沒有理由解決我的自動佈局約束,但實際上修復了它。 – darbid

+0

其實苛刻既不你的解決方案也不幫我。我希望正確的做法是使用這個線程來找到一個解決方案,而不是打開一個新的問題。我會在上面編輯。 – darbid