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

Adding custom uiView to UITableViewCell imageView property

我正在使用自定义 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)。如何在占位符图像的顶部获取此 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];

我最终解决了这个问题并为感兴趣的人发布了一个解决方案。下面的工作,但显然可以重构为一般情况。

关键是不要设置我的自定义视图 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]; 丢了东西。

即使在 willDisplayCell 中设置 avatarView.frame = cell.imageView 也没有用。

我在一堆不同的屏幕上测试了这个并且它有效。同样手动将第一行更改为 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];