无法在collectionView中重新定位ImageView:cellForItemAtIndexPath:

时间:2013-05-13 11:10:16

标签: ios objective-c uicollectionview uicollectionviewcell

我在一个UICollectionViewCell中有一个ImageView,比如imageViewA,比如ComicStripViewCellA.xib。如果条件为真,我需要重新定位imageViewA。我可以在collectionView:cellForItemAtIndexPath中访问imageViewA或更改其alpha值,但如果这是第一次将此viewCell出列,则无法重新定位它。

但是如果这个viewCell已经在池中,我可以在下次执行collectionView:cellForItemAtIndexPath时重新定位它。

-(UICollectionView *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{
     id <ComicStripViewCell> viewCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"comicStripCell" forIndexPath:indexPath];

     if (condition) {
          viewCell.imageViewA.alpha = 0.5;  // Always work.
          [viewCell reposition:YES];  // Only work if viewCell is already in the pool.
     }

     return (UICollectionView *)viewCell;
}

以下例程在ComicStripViewCellA.m中:

-(void)reposition:(BOOL)flag
{
     if (flag) {
          CGPoint center = _imageViewA.center;
          center.x -= 60;
          _imageViewA.center = center;
     }
}

我想这与运行重新定位例程时视图单元初始化未完成有关,但我不确定。

感谢任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:0)

我一直在试验,似乎UICollectionViewCell出口无法以编程方式重新定位(或者至少我不能让它们重新定位,无论如何)。然而,一种可能的解决方案是将一个简单的UIView作为唯一的插座,并以编程方式将子视图添加到该插座,在您的情况下是UIImageView。完成后,您可以自由地重新定位UIView插座中的任何子视图。我希望这有帮助!