为什么在UITableViewCell中的UIView无法设置两个顶角为圆角?

3
我无法在UITableViewCell中的UIView中设置两个顶部角为圆角。

UITableViewCell xib

 let maskPath = UIBezierPath(roundedRect: containerView.bounds, byRoundingCorners: [.TopLeft, .TopRight, ], cornerRadii: CGSize(width: 10.0, height: 10.0))
 let maskLayer = CAShapeLayer(layer: maskPath)
 maskLayer.frame = containerView.bounds
 maskLayer.path = maskPath.CGPath
 maskLayer.masksToBounds = true
 containerView.layer.mask = maskLayer

当我运行应用程序时,我会得到这个:

UITableViewCell runtime

我为自定义的UIView添加了背景颜色,为单元格内容视图添加了背景颜色,只是为了演示目的,并且我增加了右侧约束的值以显示它不起作用:

UIView with background color

但是,如果我在空的UIViewController中单独创建一个UIView,它可以完美地工作。
当我设置固定宽度并添加宽度约束时,它可以工作,但我希望宽度大小可以根据设备和方向动态设置,当添加尾随约束时它就无法工作。
有什么想法吗?我做错了什么吗?

添加 maskLayer.masksToBounds = YES - iphonic
我赞成Anthony Rn的观点。我敢打赌你的图层和视图都偏移了。此外,你还通过该层来遮罩containerView,因此如果containerView偏移了,那么maskLayer也会偏移。 - Aaron
在渲染过程的哪个阶段您设置了 maskLayer.frame = containerView.bounds?可能此时 containerView.bounds 的宽度并非您所想的那样。 - Aaron
很奇怪,肯定有原因。为什么要遮盖containerView?我敢打赌是mask有问题。 - Aaron
你能否不使用遮罩,直接给出图层路径,然后将该图层设置在容器视图上?像这样:containerView.layer = maskLayer?完全忘记遮罩? - Aaron
显示剩余7条评论
1个回答

0

我认为它正在工作,但问题在于您的UIView的宽度太大了(比您的单元格还要大),因此您看不到右下角。尝试在单元格内设置一些约束条件,我认为它会起作用。


我在UIView上设置了一个100的常量宽度约束,但它没有起作用。 - pableiros
1
请将backgroundColor设置为您的UIView,然后对其进行屏幕截图,这样我就可以看到您的UIView的两个顶角。因为现在我只能在您的屏幕截图上看到左上角。另外,请尝试使用调试视图层次结构工具,然后单击显示隐藏视图的按钮,这样您就可以看到您的UIView大小是否存在问题。 - AnthonyR
我使用自定义视图将新的图像添加到问题中,并将内容视图单元格设置为带有背景颜色。 - pableiros
你可以尝试查看视图层次结构:调试 -> 视图调试 -> 捕获视图层次结构 - gerram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接