代码之家  ›  专栏  ›  技术社区  ›  Hapeki

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

  •  0
  • Hapeki  · 技术社区  · 8 年前

    我正在创建自定义 UILabel 班原因是我想用 Constants 班一旦应用程序的原色发生变化,修改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 回复  |  直到 8 年前
        1
  •  2
  •   Rafał Sroka    8 年前

    此代码完全错误:

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

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