2012-12-25 64 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