我有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
它有效。我想不明白。如果有人理解这个问题,请告诉我。
答案 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方法。