【问题标题】:Overriding UILabel font causes cut off label覆盖 UILabel 字体会导致标签被截断
【发布时间】:2018-07-05 18:14:58
【问题描述】:

我正在创建一个自定义 UILabel 类。原因是因为我想用Constants 类调整标签的属性。一旦应用程序的原色发生变化,在 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)
    }

}

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

【问题讨论】:

  • 什么是Constants 类?
  • @RaffAl 在应用程序中定义全局常量的结构。例如“primaryColor”或“borderColor”。
  • 出现在 IB 或设备中的什么地方

标签: ios swift uiview uilabel interface-builder


【解决方案1】:

这段代码完全是错误的:

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

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

【讨论】:

  • 有道理。谢谢你。我希望 IB 显示我在内部设置的视觉更改,而不能对其进行修改。这种方法正确吗?
猜你喜欢
  • 2018-04-20
  • 2021-11-18
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 2012-04-02
  • 1970-01-01
相关资源
最近更新 更多