在 UIImageView 上设置角半径无效

我有点不知所措。我已经使用了 UIView 的图层属性来圆滑我的应用程序中的多个元素的角落。然而,这个 UIImageView 根本就没有遵守。不知道我错过了什么。

UIImageView (称为 previewImage)包含在表视图单元格中。我已经尝试过设置角半径属性多个位置(在单元格本身和创建单元格的控制器中) ,但是没有用。

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.
}

我是不是忽略了细胞装载的方式?

101084 次浏览

您需要将图层的 masksToBounds属性设置为 YES:

cell.previewImage.layer.masksToBounds = YES;

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

我相信你需要设置:

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

这个应该可以

cell.previewImage.clipsToBounds = YES;


cell.previewImage.layer.cornerRadius = 20;

在 Xcode Interface Builder 中,选择“ Clip Subviews”为视图绘制属性,并在代码 cell.previewImage.layer.cornerRadius = 20;中设置角半径,就可以完成这项工作!

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

试试下面这段代码

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

同样值得注意的是

  1. 如果使用 aspectFit 还有角半径和 clipsToBound/masksToBound,则不会得到圆角。

也就是说,如果你有这个

theImageView.contentMode = .scaleAspectFit

还有

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

或者

theImageView.layer.masksToBounds = true

它是 没用的。您必须去掉 AspectFit 代码

//theImageView.contentMode = .scaleAspectFit
  1. 确保 图像视图的宽度和高度是相同的
-(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;
}

试试这个代码:-

self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10

Swift 4.2答案:

为了使角半径起作用,将图像添加到 UIView,然后需要将图像的 masksToBounds属性设置为 true:

planeImage.layer.masksToBounds = true
planeImage.layer.cornerRadius = 20

注意: 将20替换为所需的 cornerRadius

之前的答案都不管用吗?

UIImageView 的大小可能会大于图像的大小。角半径可以设置好,但不可见在这种情况下。

通过代码快速检查 UIImageView 大小: (或者可以使用 XCode 中的“ ViewUIHiLayer y”工具)

self.imageView.backgroundColor = [UIColor greenColor];

在这个场景中,您应该确保 UIImageView 具有与图像相同的长宽比。

对于 imageView.contentMode = .scaleAspectFill,如果图像非常大,则不应用 cornerRadius,这取决于硬件。

使用调整大小的全景图像进行的一些测试:

  • IPhone X,图像大小5000x1107:4000x886: something
  • IPhone 6s Plus,图像大小10000x2215:5000x1107: something
  • IPhone 6s,图像大小10000x2215:5000x1107: something

ImageView 的尺寸为160x100。 有趣的是,较新的硬件不一定更强大。

请随意编辑这篇文章与更多的测试结果!

UIImageView 给出了使用 clipsToBounds 的拐角半径,下面是 Swift 和 Objectiv-C 的示例(下面是圆形图像的示例代码)

斯威夫特

myImageView.layer.cornerRadius = myImageView.frame.size.height/2.0
myImageView.clipsToBounds = true

目的 C

[myImageView.layer setCornerRadius:myImageView.frame.size.height/2.0];
[myImageView setClipsToBounds:TRUE];