我正在使用自定义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];
答案 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];