在Swift中使用UIRectCorner创建圆角矩形无法正常工作

4

我正在尝试为在storyboard中创建的UITableViewCell创建一个圆角矩形。我在Xcode 7中使用Swift 2。原型单元格中有两个视图,topView和bottomView。我希望topView拥有其顶部角落被圆化,bottomView也是如此。

在awakeFromNib(可能会到更好的地方):

...
self.topView.backgroundColor = UIColor.redColor()
self.bottomView.backgroundColor = UIColor.grayColor()

self.setMaskToView(self.topView, corners:UIRectCorner.TopLeft.union(UIRectCorner.TopRight))
self.setMaskToView(self.bottomView, corners: UIRectCorner.BottomLeft.union(UIRectCorner.BottomRight))
...

在一个单独的函数中(基于另一个Stack Overflow帖子的答案):
func setMaskToView(view : UIView, corners: UIRectCorner) {
    let rounded = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: 10, height: 10))
    let mask = CAShapeLayer()

    mask.path = rounded.CGPath
    view.layer.mask = mask
}

请注意,我还尝试过使用[.TopRight, .TopLeft]代替union(),基于Stack Overflow的其他帖子。但是似乎没有任何改变。我也绝望地清理和重新启动了Xcode。这就是我的结果: 顶部单元格显示问题。只有.TopLeft似乎被应用,即使它在两个不同的视图上调用 如果有人有任何想法可能是怎么回事,我会非常感激。
谢谢。

请查看我在这里的回答:https://dev59.com/0mkv5IYBdhLWcg3w1kOq#40222533 - Nhat Dinh
1个回答

6
你有两个问题。
  1. awakeFromNib 还为时过早,基于视图边界做任何事情都不可行,因为此时视图尚未针对设备进行调整大小。你应该在 awakeFromNib 中创建蒙版层,但应该在 layoutSubviews 中设置它们的路径。

  2. setMaskToView(_:corners:) 中,你需要使用 view.bounds 而不是 self.bounds 来创建路径。


是的,我看了那个好几遍,但没发现。谢谢。 - Andrew Kinnie

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