当按钮样式为 "Filled" 时,如何将字体应用于按钮?
How can I apply a font to a button when the button style is "Filled"?
我要实现的目标是带有
的单选按钮
- 填充框,
- 文本和图像之间的填充
- 以及文本的特定字体。
我的问题是我无法成功组合所有 3 个条件。系统实现哪些预期属性取决于特定按钮在 IB 中的 Style 属性设置。我也在程序代码中对填充和字体进行了更改,但发现它们被 IB 中的按钮属性否决了:
- 当样式属性为“默认”时,可以成功应用所需的字体。 (无论是通过程序代码还是在 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
结果是:
仅作记录,这是我的故事板配置:
我要实现的目标是带有
的单选按钮- 填充框,
- 文本和图像之间的填充
- 以及文本的特定字体。
我的问题是我无法成功组合所有 3 个条件。系统实现哪些预期属性取决于特定按钮在 IB 中的 Style 属性设置。我也在程序代码中对填充和字体进行了更改,但发现它们被 IB 中的按钮属性否决了:
- 当样式属性为“默认”时,可以成功应用所需的字体。 (无论是通过程序代码还是在 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
结果是:
仅作记录,这是我的故事板配置: