我目前正在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;
}
问题可以在附图中看到。
Pink = Collection View Size
棕色=细胞大小
绿色=单元格内容大小和附加的xib到内容大小。
我认为我遇到的问题是布局。当卖出价出现时,上述代码会使其变小。然后当它被重用时,CELL会再次变大,但内容视图却没有。
我已经厌倦了手动设置内容视图的框架但是什么也没做。
更新1:这也只有在我向单元格内容视图添加xib时才会发生。如果内容视图没有子视图,则没有问题
UPDate 2:看来是单元格的子视图,我的xib没有调整大小。我试图手动改变它的框架大小,但唯一有帮助的地方是细胞画直接的方法,这对我来说就像是黑客攻击。
答案 0 :(得分:1)
重复使用的单元格无法重绘,因此请调用
-(void)setFrame:(CGRect)frame {
[super setFrame:frame];
[self setNeedsDisplay]; // force drawRect:
}
来自UICollectionView的cellForItemAtIndexPath。 还可以查看this link
答案 1 :(得分:0)
我的答案非常具体,我不确定它会对任何人有所帮助。
问题在于我对灰色视图的底部有一个约束。在我将此约束更改为小于或等于之后,由于某种原因它起作用。
现在我知道这并不能解释为什么它不会发生在每个细胞上,但它解决了我的问题。
因此,如果你在搜索后登陆这里,苛刻的答案也值得一看。
编辑:6.0 UiCollectionView控制器中似乎也出现了一些错误,似乎在6.1中修复了