在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。 这就是我得到的:
如果有人有什么想法,我会很感激。
谢谢。
你有两个问题。
-
awakeFromNib
根据视图边界做任何事情都为时过早,因为此时尚未为设备调整视图大小。 您应该在awakeFromNib
创建遮罩层,但是您应该在layoutSubviews
设置它们的路径。 -
在
setMaskToView(_:corners:)
,您需要使用view.bounds
而不是self.bounds
来创建路径。