0

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

编辑我按照 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;

}

可以在附图中看到问题。

重用单元格未调整大小

粉红色 = 收藏视图尺寸

棕色 = 单元格大小

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

我认为我遇到的问题是布局。当卖出出列时,上面的代码使它变小。然后当它被重用时,CELL 会再次变大,但内容视图不会。

我已经厌倦了手动设置内容视图的框架,但这无济于事。

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

更新2:似乎单元格的子视图,我的xib没有调整大小。我曾尝试手动更改其帧大小,但唯一有帮助的地方是单元格 drawrect 方法,这对我来说就像是 hack。

4

2 回答 2

1

重复使用的单元格无法重绘自己,因此请致电

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

来自 UICollectionView 的 cellForItemAtIndexPath。也看看这个链接

这个问题

于 2012-12-25T09:41:33.263 回答
0

我的回答非常具体,我不确定它会帮助任何人。

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

现在我知道这并不能解释为什么它没有发生在每个单元格上,但它解决了我的问题。

因此,如果您在搜索后登陆这里,Harsh 的答案也可能值得一看。

编辑:6.0 UiCollectionView 控制器中似乎也存在一些错误,这些错误似乎已在 6.1 中修复

于 2012-12-27T16:29:50.660 回答