在Swift中使用UIRectCorner的圆角矩形不起作用

我正在尝试为我在故事板中创建的UITableViewCell创建一个圆角矩形。 我在Xcode 7中使用Swift 2.我在原型单元格中有两个视图,topView和Bottom视图。 我希望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溢出post的答案):

 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(),基于各种其他堆栈溢出post。 似乎什么都没改变。 在绝望中也清理并重新启动Xcode。 这就是我得到的:

Top Cell显示问题。只有.TopLeft似乎被应用,即使它是在两个单独的视图上调用

如果有人有什么想法,我会很感激。

谢谢。

你有两个问题。

  1. awakeFromNib根据视图边界做任何事情都为时过早,因为此时尚未为设备调整视图大小。 您应该在awakeFromNib创建遮罩层,但是您应该在layoutSubviews设置它们的路径。

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