在UIImageView上设置圆angular半径不起作用

我有点不知所措 我已经使用UIView的图层属性四舍五入在我的应用程序中的多个元素的angular落。 但是,这一个UIImageView根本不符合。 不知道我缺less什么。

UIImageView(称为previewImage)包含在表格视图单元格中。 我试过设置cornerRadius属性的多个位置(在单元格本身和控制器中创build单元格)无济于事。

static NSString *CellIdentifier = @"MyTableViewCell"; MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; cell = [topLevelObjects objectAtIndex:0]; cell.previewImage.layer.cornerRadius = 20; //Made it 20 to make sure it's obvious. } 

有没有关于我错过的细胞加载的方式?

你需要设置图层的masksToBounds属性为YES

cell.previewImage.layer.masksToBounds = YES;

这是因为UIImageView控件创build一个伪子视图来保存UIImage对象。

这应该工作

 cell.previewImage.clipsToBounds = YES; cell.previewImage.layer.cornerRadius = 20; 

我相信你需要设置:

 cell.previewImage.layer.masksToBounds = YES; cell.previewImage.layer.opaque = NO; 

在Xcode Interface Builder中,为视图select“Clip Subviews”graphics属性,并在代码中设置圆angular半径cell.previewImage.layer.cornerRadius = 20; 为我做的工作!

请参阅IB中的“剪辑子视图”选项

另外值得注意的是

  1. 如果您使用的aspectFit和cornerRadius与clipsToBounds / masksToBounds,您将不会得到圆angular。

即如果你有这个

 theImageView.contentMode = .scaleAspectFit 

  theImageView.layer.cornerRadius = (theImageView.frame.size.height)/2 theImageView.clipsToBounds = true 

要么

 theImageView.layer.masksToBounds = true 

不会工作 。 你将不得不摆脱aspectFit代码

 //theImageView.contentMode = .scaleAspectFit 
  1. 确保图像视图宽度和高度相同

试试下面这段代码

 cell.previewImage.layer.cornerRadius = 20; cell.previewImage.clipsToBounds = YES; 
 -(void) viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self setMaskTo:viewDistance byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight]; } - (void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners { UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(20.0, 20.0)]; CAShapeLayer *shape = [[CAShapeLayer alloc] init]; shape.frame = self.view.bounds; [shape setPath:rounded.CGPath]; view.layer.mask = shape; }