矩形视图上的完美​​圆角

Posted

技术标签:

【中文标题】矩形视图上的完美​​圆角【英文标题】:Perfect round corners on rectangular view 【发布时间】:2017-08-15 20:01:34 【问题描述】:

我有一个矩形视图,我希望在末端有“完美”的圆形边框。我正在像这样绕过角落:

    contentView.layer.cornerRadius = 30; //arbitrary number

    contentView.layer.borderWidth = 1.0
    contentView.layer.borderColor = UIColor.white.cgColor

这是我的结果:

这就是我想要的结果:

我想为我的视图确定cornerRadius,以动态实现圆角。有任何想法吗?谢谢!

【问题讨论】:

你需要让cornerRadius等于高度的一半。 并且你需要在布局完成/更改时进行,不是viewDidLoad/init ... 例如在视图控制器的viewDidLayoutSubviews 中(或者,如果在UIView 子类中执行此操作,则在layoutSubviews 中)。 【参考方案1】:

你走对了。有点传统的做法是这样的:

contentView.layer.cornerRadius = contentView.bounds.height / 2

【讨论】:

您能否在更多上下文中显示该代码的放置位置? 我已经尝试过了(实际上是在发布问题之前)。我得到了一个非常时髦的结果imgur.com/5HYe8Fx.png @luk2302 这是在 init 函数中的自定义视图(UIView 的子类)中。刚刚看到你对OP的评论。我猜我需要等到它布置好 @user1282637 覆盖 layoutSubviews 并更新那里的图层。 你应该用另一个设置你的视图来做。好地方是视图控制器的 viewDidLoad 方法。不要忘记设置自动布局约束或 autoResizingMask。你的视图需要知道它的大小。如果您以编程方式添加它,它会在作为子视图添加到父视图后知道它。【参考方案2】:

如果你的“contentView”是一个继承自 UIView 的类,那么:

class CustomView: UIView

    ...
    override func layoutSubviews()
    
        super.layoutSubviews() //Don't want to change the default behavior of this func. Just want to add to it.
        layer.cornerRadius = bounds.height / 2
    
    ...

如果它只是一个 UIViewController 中的普通 UIView,那么你可以在 UIViewController 的 viewWillAppear(_ animated: Bool) 方法中更新它。

【讨论】:

以上是关于矩形视图上的完美​​圆角的主要内容,如果未能解决你的问题,请参考以下文章

android圆角textview,角落里有完美的圆角

每个单词周围的圆角矩形 iPhone

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

iPad 上的快照模式视图控制器出现非圆角

如何在tableview单元格中设置视图内的视图的圆角半径?

SwiftUI:将背景颜色应用于圆角矩形