Ios UICollectionViewCell和UIScrollView

Ios UICollectionViewCell和UIScrollView,ios,objective-c,uicollectionviewcell,Ios,Objective C,Uicollectionviewcell,在UICollectionViewCell中,我遇到了UIScrollView的一个奇怪行为。在我的项目中,我有一个collectionView,每个单元格都有一个包含一个或多个图像的UIScrollView。以下是一些用于解决此问题的示例代码: - (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { Custo

在UICollectionViewCell中,我遇到了UIScrollView的一个奇怪行为。在我的项目中,我有一个collectionView,每个单元格都有一个包含一个或多个图像的UIScrollView。以下是一些用于解决此问题的示例代码:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

     CustomCollectionCell * cell = [cv dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];
     UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 150, 150)];
     imageView.image = [UIImage imageNamed:@"someImage.png"];        
     [cell.scrollView addSubview:imageView];

     return cell;
}
当然,在我的项目中,它不是来自数据库的相同图像,而是不同的图像

添加第一个收集单元没有问题。当我添加第二个单元格时,scrollView似乎在复制自身,并将自身的另一个实例放在顶部。我知道这听起来很奇怪,但你可以在下图中看到它的样子:

注意左边scrollView中的图像是如何变暗的,我认为这是因为scrollView被复制了

所以,我猜这个细胞被错误地重用了


谢谢你的帮助

每次调用
collectionView:cellForItemAtIndexPath:
时,都会向重用的单元格添加一个新的
UIImageView
。要解决此问题,请在自定义
UICollectionViewCell
中,实现
prepareforeuse
方法。在该方法中,删除图像视图

要实现这一点,可以在图像视图上设置标记。例如:

 (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

     CustomCollectionCell * cell = [cv dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];
     UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 150, 150)];
     imageView.image = [UIImage imageNamed:@"someImage.png"];        
     [cell.scrollView addSubview:imageView];

     // The following line of code is new
     cell.contentView.tag = 100;

     return cell;
}
要从单元格中删除图像视图,请在自定义单元格中添加/更新
prepareforeuse
方法:

-(void)prepareForReuse{
    UIView *myImageView = [self.contentView viewWithTag:100];
    [myImageView removeFromSuperview];
}

好吧,这个问题的固定部分,它没有重复,但是现在我注意到另一个奇怪的问题。如果我通过在一个单元格的滚动视图中滑动来更改内容偏移量,则内容偏移量会传递到下一个单元格,而上一个单元格可能会获得新单元格的内容偏移量(即x=0,y=0)。这有点难以解释,因为我不太明白这种行为的原因,抱歉:)正如我所理解的,每次添加新单元格时,整个collectionView都会更新。当单元格添加了滚动视图时,会导致非常奇怪的结果。我以为只有新的细胞被修改了,但我看到所有的细胞都被修改了reused@SergeyCatraniuc-建议您接受上述答案;-),然后创建一个新问题,显示
UIScrollView的代码
我的问题没有得到完全回答,但是我想我将放弃UIScrollView,转而使用UIImageView找到解决方法。谢谢你的帮助