如何为 UIView 添加圆角半径

Posted

技术标签:

【中文标题】如何为 UIView 添加圆角半径【英文标题】:How to add corner radius for UIView 【发布时间】:2020-02-15 09:50:42 【问题描述】:

我必须设置一些 UIView 的圆角半径,并通过以下代码进行设置:

@IBDesignable
class MyUIviewCorner: UIView 

    override func layoutSubviews()  setup()  

    func setup() 
        let r = self.bounds.size.height / 2
        let path = UIBezierPath(roundedRect: self.bounds,
        byRoundingCorners: [.topLeft, .topRight],
        cornerRadii: CGSize(width: r, height: r))
        let mask = CAShapeLayer()
        mask.backgroundColor = UIColor.clear.cgColor
        mask.path = path.cgPath
        layer.borderWidth = 1.5
        layer.borderColor = UIColor.red.cgColor
        self.layer.mask = mask
    

但我得到了这个结果:

我不明白为什么顶角有空格?

如果我设置底角半径,我会得到:

【问题讨论】:

您只想要一个顶角为圆角的红色矩形吗? 是的,我做清扫车 在此处查看我的答案***.com/a/46408735/5575955 124 位来自用户的有用投票... 【参考方案1】:

您不应该为此使用掩码,您可以简单地使用 layer.maskedCorners 属性。

layer.cornerRadius = r
layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]

【讨论】:

【参考方案2】:

如果你增加边框宽度,你会明白为什么:

在创建的图层绘制的圆角矩形“顶部”似乎还有一个填充矩形,覆盖了圆角。


你可以通过UIBezierPaths 来实现你想要的:

override func draw(_ rect: CGRect) 
    let r = self.bounds.size.height / 2
    let path = UIBezierPath(roundedRect: self.bounds,
    byRoundingCorners: [.topLeft, .topRight],
    cornerRadii: CGSize(width: r, height: r))
    path.lineWidth = 1.5
    UIColor.red.setStroke()
    path.stroke()

【讨论】:

以上是关于如何为 UIView 添加圆角半径的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Xcode 8 将 UIView 作为具有圆角半径的圆

仅将角半径设置为 UIView/UIButton 的特定侧

iOS6 向具有角半径的容器 UIView 添加阴影

如何为我在 Android 中用作背景的可绘制对象添加圆角?

未显示超级视图子视图 UIView 的角半径

如何为 CALayer 的角半径设置动画