将自定义uiView添加到UITableViewCell imageView属性

时间:2015-01-21 23:07:51

标签: ios uitableview

我正在使用自定义uiview在成功时异步下载并更改其图像属性。

我可以使用UITableViewCellStyleSubtitle样式将静态图像添加到UITableViewCell,代码如下:

        CGRect  viewRect = CGRectMake(-20, -20, 40, 40);
        cell.imageView.frame = viewRect;

        [cell.imageView setImage:[UIImage imageNamed:@"example"]];
        [cell.imageView setContentMode:UIViewContentModeScaleAspectFill];
        [cell.imageView setClipsToBounds:YES];
        [cell.imageView.layer setBorderColor:[UIColor orangeColor].CGColor];
        [cell.imageView.layer setBorderWidth:1.0];
        [cell.imageView.layer setCornerRadius:cell.imageView.frame.size.width/1.25];

但是当我尝试通过以下方式添加自定义UIView时:

        PAAImageView *avatarView = [[PAAImageView alloc] initWithFrame:cell.imageView.frame backgroundProgressColor:[UIColor whiteColor] progressColor:[UIColor lightGrayColor]];
        [cell.imageView addSubview:avatarView];
        [cell.imageView bringSubviewToFront:avatarView];
        [cell.imageView setClipsToBounds:YES];
        [cell.imageView.layer setBorderColor:[UIColor orangeColor].CGColor];
        [cell.imageView.layer setBorderWidth:1.0];
        [cell.imageView.layer setCornerRadius:cell.imageView.frame.size.width/1.25];

自定义UIView永远不会出现。有没有单独的方法来做到这一点?

修改

我正在分配占位符图像,然后将PAAImageview置于其上。与之前设置静态图像相同,下面添加视图但仍然在框架(-20,-20,40,40)处大小,而cell.imageView正在被炸毁(我认为是因为UIViewContentModeScaleAspectFill)。如何在占位符图像的TOP上获取此PAAImageView?

        PAAImageView *avatarView = [[PAAImageView alloc] initWithFrame:cell.imageView.bounds backgroundProgressColor:[UIColor whiteColor] progressColor:[UIColor lightGrayColor]];
        [avatarView setContentMode:UIViewContentModeScaleAspectFill];
        avatarView.progressColor = [UIColor orangeColor];
        [cell addSubview:avatarView];

1 个答案:

答案 0 :(得分:2)

我最终解决了这个问题并为那些感兴趣的人发布了解决方案。以下工作但可以明确地重构为一般情况。

关键是不要设置我的自定义视图avatarView.frame = cell.imageView,因为在绘制cell.imageView时正在调整框架大小和宽度。我不确定为什么,但设置avatarView.frame.size.width or height = 1.5 * cell.imageView.frame.size.width or height有效。

可能是因为设置[cell.imageView setContentMode:UIViewContentModeScaleAspectFill]会在绘制框架时调整框架的大小,或者cell.imageView在绘制时忽略其框架属性。或者[cell.imageView.layer setCornerRadius:cell.imageView.frame.size.width/1.25];扔了一些东西。

即使在avatarView.frame = cell.imageView中设置willDisplayCell也无效。

我在一堆不同的屏幕上对它进行了测试,但它确实有效。同时手动将第一行更改为CGRect viewRect = CGRectMake(-20, -20, 60, 60);& CGRect viewRect = CGRectMake(-40, -40, 60, 60);& CGRect viewRect = CGRectMake(-40, -40, 80, 80);无效,因为图像不再出现。

实际代码

//manually assigning frame to imageView and image
 CGRect  viewRect = CGRectMake(-20, -20, 40, 40);
 cell.imageView.frame = viewRect;
 [cell.imageView setImage:[UIImage imageNamed:@"example"]];

//adding actual image. 
  PAAImageView *avatarView = [[PAAImageView alloc] initWithFrame:CGRectMake(cell.imageView.bounds.origin.x, cell.imageView.bounds.origin.y, cell.imageView.frame.size.width*1.5, cell.imageView.frame.size.height*1.5) backgroundProgressColor:[UIColor whiteColor] progressColor:[UIColor lightGrayColor]];
  [cell.imageView addSubview:avatarView];
  [cell.imageView bringSubviewToFront:avatarView];

  //adjusting image view to cirle
  [cell.imageView.layer setBorderColor:[UIColor orangeColor].CGColor];
  [cell.imageView.layer setBorderWidth:1.0];
  [cell.imageView setContentMode:UIViewContentModeScaleAspectFill];
  [cell.imageView setClipsToBounds:YES];
  [cell.imageView.layer setCornerRadius:cell.imageView.frame.size.width/1.25];