我正在创建自定义UILabel
课程。原因是因为我想用Constants
类来调整Label的属性。一旦应用程序的主要颜色发生变化,修改IB中的属性会变得很麻烦。无论如何这是我自定义的UILabel类:
@IBDesignable class FormTitleLabel: UILabel {
override var font: UIFont! {
get {
return UIFont.systemFont(ofSize: 36, weight: .heavy)
} set {
super.font = font
}
}
}
这会导致标签出现截止:
我可以使用以下代码解决此问题:
@IBDesignable class FormTitleLabel: UILabel {
override var font: UIFont! {
get {
return UIFont.systemFont(ofSize: 36, weight: .heavy)
} set {
super.font = font
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
setup()
}
override func awakeFromNib() {
super.awakeFromNib()
setup()
}
private func setup() {
self.font = UIFont.systemFont(ofSize: 36)
}
}
为什么这个解决方案有效?
答案 0 :(得分:2)
这段代码完全错了:
override var font: UIFont! {
get {
return UIFont.systemFont(ofSize: 36, weight: .heavy)
} set {
super.font = font
}
}
您始终返回字体A
,但内部设置字体B
。查看绘图函数检查标签的字体以绘制文本,并使用字体A
,但实际上,它们应使用字体B
。这就是为什么你有这种奇怪的行为。