首页 > 解决方案 > ButtonStyle 字体跟踪或投射配置标签?

问题描述

我想在我ButtonStyle使用带有 a 的简单 Button 构造函数时设置文本/标签字体属性StringProtocol,而不是传入完整视图,但makeBody函数中的配置标签不允许这样做。我明白了为什么 -makeBody返回some View没有我想使用的trackingand修饰符。textCase

有没有办法将配置标签转换为Text视图,或者以某种方式让我将额外的字体修饰符(跟踪和 textCase)直接放入我的视图中,ButtonStyle这样我就不必传递Text带有额外修饰符的视图?

// The Text properties I'd like to modify which are not available
// on the configuration label, so I've added them to this Text extension
extension Text {
  func buttonText() -> some View {
    self.tracking(2.0).textCase(.uppercase)
  }
}

// What I would like...
Button("Some Text") {
  // Some action
}
  .buttonStyle(BrandedButton())

// What I currently have to do
Button(action: {}, label: {
  Text("Some Text")
    .buttonText()
})
  .buttonStyle(BrandedButton())

BrandedButton是我的ButtonStyle。我明显担心的是这种重复 - 必须在.buttonText()任何地方添加修饰符 - 很容易被忽视,并可能导致按钮样式不匹配。.font是 的有效修饰符configuration.label,但其他不是。

标签: swiftui

解决方案


推荐阅读