在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中的“剪辑子视图”选项
另外值得注意的是
- 如果您使用的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
- 确保图像视图的宽度和高度相同
试试下面这段代码
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; }