矩形视图上的完美圆角
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) 方法中更新它。
【讨论】:
以上是关于矩形视图上的完美圆角的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使用 UIRectCorner 的圆角矩形不起作用