在UIImageView上设置角半径不起作用

时间:2010-11-30 14:12:03

标签: iphone ios uiimageview rounded-corners

我有点失落。我已经使用UIView的图层属性来围绕我的应用程序中的多个元素的角落。但是,这一个UIImageView根本就不符合。不确定我错过了什么。

UIImageView(称为previewImage)包含在Table View Cell中。我已经尝试将cornerRadius属性设置为多个位置(在单元格本身和创建单元格的控制器中)无济于事。

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

是否有关于我缺少的细胞加载方式的内容?

11 个答案:

答案 0 :(得分:353)

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

cell.previewImage.layer.masksToBounds = YES;

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

答案 1 :(得分:22)

这应该有效

cell.previewImage.clipsToBounds = YES;

cell.previewImage.layer.cornerRadius = 20;

答案 2 :(得分:22)

另外值得注意的是

  1. 如果您使用aspectFit AND cornerRadius with clipsToBounds / masksToBounds,则无法获得圆角。
  2. 即如果你有这个

    theImageView.contentMode = .scaleAspectFit
    

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

    theImageView.layer.masksToBounds = true
    

    赢得了 。你将不得不摆脱aspectFit代码

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

答案 3 :(得分:11)

我相信你需要设置:

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

答案 4 :(得分:4)

在Xcode Interface Builder中,选择' Clip Subviews'视图的绘图属性以及在代码cell.previewImage.layer.cornerRadius = 20;中设置角半径为我做了工作!

See 'Clip Subviews' option in IB

答案 5 :(得分:2)

尝试下面这段代码

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

答案 6 :(得分:1)

尝试此代码:-

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

答案 7 :(得分:1)

对于imageView.contentMode = .scaleAspectFill,如果图像很大,则cornerRadius不适用,具体取决于硬件。

一些对调整后的全景图像进行测试:

  • iPhone X,图像尺寸5000x1107:?4000x886:✅
  • iPhone 6s Plus,图像尺寸10000x2215:?5000x1107:✅
  • iPhone 6s,图像尺寸10000x2215:?5000x1107:✅

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

随时编辑此帖子以获取更多测试结果!

答案 8 :(得分:0)

-(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;
       }

答案 9 :(得分:0)

Swift 4.2答案:

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

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

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

答案 10 :(得分:0)

以前的答案没有用吗?

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

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

self.imageView.backgroundColor = [UIColor greenColor]; 

在这种情况下,您应该确保UIImageView与图像具有相同的长宽比。