UICollectionViewCells与UICollectionViewFlowLayout - 奇怪的布局发生

时间:2012-12-25 05:59:05

标签: iphone ios xcode uicollectionview autolayout

我目前正在xcode中测试一个UICollectionView,只有一个水平行,就像有点封面流一样。基本上我有自己的Custom Cell类和单元格的xib文件,然后在每个单元格上我添加另一个带有xib的UIView。如果你想知道为什么,我可以添加不同的UIViews到单元格。现在我只添加一个。

编辑我已经按照WWDC 2012视频创建了一个UICollectionViewCell的线路布局,但有一点不同。所有其他细胞变小,而不是中间细胞变大。

以下所有内容对我来说都是新的。

-(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

Pink = Collection View Size

棕色=细胞大小

绿色=单元格内容大小和附加的xib到内容大小。

我认为我遇到的问题是布局。当卖出价出现时,上述代码会使其变小。然后当它被重用时,CELL会再次变大,但内容视图却没有。

我已经厌倦了手动设置内容视图的框架但是什么也没做。

更新1:这也只有在我向单元格内容视图添加xib时才会发生。如果内容视图没有子视图,则没有问题

UPDate 2:看来是单元格的子视图,我的xib没有调整大小。我试图手动改变它的框架大小,但唯一有帮助的地方是细胞画直接的方法,这对我来说就像是黑客攻击。

2 个答案:

答案 0 :(得分:1)

重复使用的单元格无法重绘,因此请调用

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

来自UICollectionView的cellForItemAtIndexPath。 还可以查看this link

question

答案 1 :(得分:0)

我的答案非常具体,我不确定它会对任何人有所帮助。

问题在于我对灰色视图的底部有一个约束。在我将此约束更改为小于或等于之后,由于某种原因它起作用。

现在我知道这并不能解释为什么它不会发生在每个细胞上,但它解决了我的问题。

因此,如果你在搜索后登陆这里,苛刻的答案也值得一看。

编辑:6.0 UiCollectionView控制器中似乎也出现了一些错误,似乎在6.1中修复了