当按钮样式为 "Filled" 时,如何将字体应用于按钮?

How can I apply a font to a button when the button style is "Filled"?

我要实现的目标是带有

的单选按钮

我的问题是我无法成功组合所有 3 个条件。系统实现哪些预期属性取决于特定按钮在 IB 中的 Style 属性设置。我也在程序代码中对填充和字体进行了更改,但发现它们被 IB 中的按钮属性否决了:

这是一个简化示例,我希望在其中应用 Courier New 字体。我定义了两个 Radiobuttons 来演示 Style 属性的影响。首先是带有“默认”的版本。我们看到文本是Courier。但是没有框架和填充。此外,如果以编程方式设置填充,系统将忽略它。

下一个带有“填充”的版本。字体设置被系统忽略。这是我的问题:

有没有办法把frame、font和padding结合起来?任何意见,将不胜感激。作为参考,我也在其中进行了设置的一段代码。我写了一个 class RadioButton,其中应该应用图像、字体和填充。

class RadioButton: UIButton {
// Images
let checkedImage = UIImage(named: "radioButtonSet_25")! as UIImage
let uncheckedImage = UIImage(named: "radioButtonNotSet_25")! as UIImage

// Bool property
var isChecked: Bool = false {
    didSet {
        self.titleLabel?.font = UIFont(name: "CourierNewPSMT", size: 
CGFloat(15))
        self.configuration?.imagePadding = (50 as CGFloat)
        if isChecked == true {
            self.setImage(checkedImage, for: UIControl.State.normal)
        } else {
            self.setImage(uncheckedImage, for: UIControl.State.normal)
        }
    }
  }
}

我认为您可能已经在故事板和 iOS 15 的新 configuration-based 按钮中发现了一个错误。您必须在代码中设置字体。例子

    guard var config = button.configuration else {
        return
    }
    config.attributedTitle = try! AttributedString( NSAttributedString(string: "Button", attributes: [
        .font: UIFont(name: "Courier New Italic", size: 20)!,
        .foregroundColor: UIColor.systemOrange,
    ]), including: AttributeScopes.UIKitAttributes.self
                                            )
    button.configuration = config

结果是:

仅作记录,这是我的故事板配置: