Objective-C-单元格中的UIView —无法右上角

codeday· 2019-11-17
本文来自 codeday ,作者 codeday
我在静态表格视图单元格中有一个矩形UIView对象.我有一个到该对象的出口,我尝试有选择地圆角,但不会在右侧圆角.这是情节提要中的外观:

我要配置的视图是浅黄色的.红色视图仅用于确认其他视图没有被裁剪,否则没有实际目的.

没有约束问题或错误.这是在4S上的外观:

我正在进行tableView:willDisplayCell:forRowAtIndexPath中的配置:

使用以下代码(myView是上面的浅黄色视图的出口):

self.myView.layer.cornerRadius = 5.0f;
self.myView.clipsToBounds = YES;

我得到这个结果:

所有4个角均圆角.但是我需要有选择地圆角,通常是两个上角或两个下角.这是舍入两个底角的代码:

CAShapeLayer *shape = [[CAShapeLayer alloc] init];
shape.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, self.myView.bounds.size.width, self.myView.bounds.size.height)
                                   byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight
                                         cornerRadii:CGSizeMake(5.0f, 5.0f)].CGPath;
self.myView.layer.mask = shape;
self.myView.layer.masksToBounds = YES;

结果如下:

它不适用于任一右角.对于左手两个角都可以正常工作.

我在普通视图控制器(表视图之外)上使用视图对象测试了贝塞尔曲线代码,并且该代码按预期工作-我可以有选择地绕任何角落.

任何想法为什么它不能在表视图单元格中工作?

如何在不借助绘图代码的情况下完成此任务?

最佳答案
我认为这是由于视图的框架而发生的,因此在制作图层蒙版后边界会发生变化.

作为tableView:willDisplayCell:forRowAtIndexPath的文档:状态:委托返回后,表视图仅设置alpha和frame属性,然后仅在为行滑动时设置动画.

最好的策略是将UITableViewCell子类化,并在layoutSubviews中执行图层调整.