为啥cornerRadius.width/2 不给我一个完美的圆?

Posted

技术标签:

【中文标题】为啥cornerRadius.width/2 不给我一个完美的圆?【英文标题】:Why doesn't cornerRadius.width/2 give me a perfect circle?为什么cornerRadius.width/2 不给我一个完美的圆? 【发布时间】:2018-09-29 08:09:20 【问题描述】:

我正在尝试使用此代码从方形视图创建一个圆圈:

self.situationerCircle.layer.cornerRadius = self.situationerCircle.frame.size.width/2.0
situationerCircle.clipsToBounds = true

但我仍然没有得到一个完美的圆。我很确定这与我的约束有关,因为我使用这些约束进行了测试循环:

使用此代码:

testc.layer.cornerRadius = self.testc.frame.size.width/2
testc.clipsToBounds = true

这非常有效。然而,坏圈的约束如下所示:

原因是因为我想让它的大小与其容器成比例地增长,同时保持相同的 1:1 比例。但结果是一个半圆形,具有微妙但可见的边缘。任何想法如何解决这个问题?

【问题讨论】:

我猜是因为您根据width 应用cornerRadius 太快了。这意味着当你这样做时,width 它还不是最后一个。在didLayoutSubview() 中进行操作。您可以通过打印您所做的宽度以及它在didLayoutSubview() 中的呈现方式来检查它。 好人,成功了!非常感谢! :) 【参考方案1】:

如果您尝试在viewDidLoad() 中执行此代码,则可能会发生这种情况。 viewDidAppear() 可以工作,但如果您在单元格内尝试,则有一个名为 awakeFromNib() 的方法,您可以在其中定义对象。添加它并在那里替换您的代码。我同意 Larme 的回答,您可以致电 layoutIfNeeded() 刷新视图并强制完成我认为的完美圆圈。

【讨论】:

以上是关于为啥cornerRadius.width/2 不给我一个完美的圆?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 sklearn.cluster.AgglomerativeClustering 不给我们合并集群之间的距离?

如果我不给它提供命令行参数,为啥我的程序会崩溃? [关闭]

为啥 glColorPointer 不给三角形着色 - 以及 opengl es 的其他奇怪的东西

confluence为啥不给,用户删除自己创建的附件 的权限

圆角 UIButton - 无法对齐文本

“token”验证一直失败是为啥?