覆盖UILabel字体会导致切断标签

时间:2018-01-26 11:49:04

标签: ios swift uiview uilabel interface-builder

我正在创建自定义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
        }
    }
}

这会导致标签出现截止:

enter image description here

我可以使用以下代码解决此问题:

@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)
    }

}

为什么这个解决方案有效?

1 个答案:

答案 0 :(得分:2)

这段代码完全错了:

override var font: UIFont! {
    get {
        return UIFont.systemFont(ofSize: 36, weight: .heavy)
    } set {
        super.font = font
    }
}

您始终返回字体A,但内部设置字体B。查看绘图函数检查标签的字体以绘制文本,并使用字体A,但实际上,它们应使用字体B。这就是为什么你有这种奇怪的行为。