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

Posted

技术标签:

【中文标题】在 Swift 中使用 UIRectCorner 的圆角矩形不起作用【英文标题】:Rounded rect using UIRectCorner in Swift not working 【发布时间】:2015-10-10 05:17:51 【问题描述】:

我正在尝试为我在情节提要中创建的 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))
...

在单独的函数中(基于对另一个堆栈溢出帖子的回答):

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

如果有人对可能发生的事情有任何想法,我将不胜感激。

谢谢。

【问题讨论】:

在这里查看我的答案:***.com/a/40222533/2594699 【参考方案1】:

你有两个问题。

    awakeFromNib 基于视图边界做任何事情还为时过早,因为此时还没有为设备调整视图大小。您应该在awakeFromNib 中创建遮罩层,但您应该在layoutSubviews 中设置它们的路径。

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

【讨论】:

是的,我看了几十遍,没看到。谢谢

以上是关于在 Swift 中使用 UIRectCorner 的圆角矩形不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Swift中带角半径的集合视图

UIBezierPath 在右上角和右下角不起作用

可调整大小视图的圆角

自动布局约束和 CALayer 问题

Uibezierpath按钮宽度问题

Bezierpath 按钮宽度问题