子类化 UIButton 标题字体大小意外更改

Posted

技术标签:

【中文标题】子类化 UIButton 标题字体大小意外更改【英文标题】:Subclassed UIButton title font size changing unexpectedly 【发布时间】:2021-12-25 06:49:32 【问题描述】:

我正在使用协议委托来设置 UIButton 的标题。然而,字体大小意外地从 14 变为 17。我尝试将按钮子类化以保持字体大小为 14,但显然出了点问题。有人建议,字体大小可能在某处存在冲突。但是,我找不到任何会产生冲突的代码。

子类按钮:

import UIKit

class typeButton: UIButton 
    
    override init(frame: CGRect) 
        super.init(frame: frame)
        
        titleLabel?.font = UIFont(name: "Helvetica", size: 14)
    
    
    required init?(coder aDecoder: NSCoder) 
       super.init(coder: aDecoder)
    

协议扩展:

extension ObservationDetailViewController: MushroomTypeDelegate 
    func didSelectMushroom(name: String) 
        typeButton.setTitle(name, for: .normal)
        observation?.type = name
    
 // End of Extension

按钮通过 Storyboard 进行分类。如果我在设置按钮标题typeButton.setTitle(name, for: .normal)it shows the font at size 14 的行上放置一个断点。然而,当我越过断点时,字体意外地变大了。我可以使用属性文本和 setAttributedTitle 来解决这个问题,但我很好奇为什么要更改字体大小。

Link to GitHub file

【问题讨论】:

【参考方案1】:

尝试在init?(coder aDecoder: NSCoder) 中设置字体大小,因为您是从情节提要中对按钮进行分类的:

class TypeButton: UIButton 
    
    override init(frame: CGRect) 
        super.init(frame: frame)
        commonInit()
    
    
    required init?(coder aDecoder: NSCoder) 
       super.init(coder: aDecoder)
       commonInit()
    

    private func commonInit() 
        titleLabel?.font = UIFont(name: "Helvetica", size: 14)
    

并确保字体名称正确。

【讨论】:

仍然出现同样的问题;在控制台中打印出字体点大小将显示 14,但在显示之前已更改为 17。我假设我的代码中一定存在一些冲突。

以上是关于子类化 UIButton 标题字体大小意外更改的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局在屏幕更改时调整自定义单元格中的 UIButton 字体

调整字体大小以适合多个 UIButton,使它们都具有相同的字体大小

如何使用 Swift 更改 UIButton 的字体

UIButton - 如何设置最小字体大小?

UIButton 不同字体大小的标题和副标题

将 UIButton 字体大小调整为宽度