按钮框架在运行时更改

时间:2016-08-11 15:50:53

标签: ios swift uibutton

我有UIButton的子类:

class ColorButton: UIButton {
    override func awakeFromNib() {
        self.layer.backgroundColor = UIColor.blackColor().CGColor
        self.layer.cornerRadius = frame.size.width / 2
        self.clipsToBounds = true
    }
}

在界面构建器中,我将按钮设置为4个约束:width = 100, height = 100, centerX, centerY。 当我在模拟器上运行代码时,该按钮消失。但是,如果设置

self.layer.cornerRadius = 50

它有效。我想不明白。如果有人理解这个问题,请告诉我。

2 个答案:

答案 0 :(得分:2)

添加awakeFromNib第一行:

self.layoutIfNeeded()

代码:

class ColorButton: UIButton {
    override func awakeFromNib() {
        self.layoutIfNeeded()
        self.layer.backgroundColor = UIColor.blackColor().CGColor
        self.layer.cornerRadius = frame.size.width / 2
        self.clipsToBounds = true
    }
}

答案 1 :(得分:0)

你的代码在一个新项目中工作正常,所以我怀疑问题出在其他地方。你忘了打电话给super.awakeFromNib()。来自Apple docs

  

您必须调用awakeFromNib的超级实现来提供父级   对他们进行任何额外初始化的机会进行分类   要求。虽然这个方法的默认实现确实如此   没有,许多UIKit类提供非空实现。你可以   在你自己的任何时候调用超级实现   awakeFromNib方法。

enter image description here