【问题标题】:UIButton Subclass using its size to set corner radius with AutolayoutUIButton 子类使用它的大小来设置带有自动布局的角半径
【发布时间】:2016-04-13 02:06:57
【问题描述】:

我有以下UIButton 的子类,只是为了给UIButton 一个圆形边框,假设UIButton 的高度和宽度设置相等。但是当自动布局完成它的工作时,我没有得到正确的半径。如何更改此类以使用自动布局正确运行?

import UIKit

class CircularButton: UIButton {

    required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
        self.layer.cornerRadius = self.bounds.size.height / 2
        self.layer.borderWidth = 1
    }
}

【问题讨论】:

  • 可以截图吗?
  • 问题是在init运行时,CircularButton的视图还没有正确设置最终的self.bounds.size。因为 Autolayout 稍后会做(在初始化之后)。因此角半径得到的值不一定是 self.bounds.size.height / 2 最终值的一半。我认为这很清楚,屏幕截图没有透露任何秘密。

标签: swift uibutton autolayout subclass


【解决方案1】:

总是调用:

setNeedsLayout()
layoutIfNeeded()

在使用 AutoLayout 时访问视图的框架或边界之前。否则,您在 AutoLayout 设置视图之前访问视图的大小。调用这两个方法会强制执行 AutoLayout 传递,允许您访问视图的正确大小。

另外,你应该在awakeFromNib而不是init中设置圆角半径。

【讨论】:

  • 您的建议无效,但这有效:覆盖 func layoutSubviews() { self.layer.cornerRadius = self.bounds.size.height/2 }
猜你喜欢
  • 2016-06-04
  • 1970-01-01
  • 2013-04-30
  • 2015-01-05
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多