2

Text View在 SwiftUI 中,您可以使用trackingView 修饰符在 a 上设置字体跟踪(字母之间的间距) :

Text("Hello, World!")
  .tracking(10)

如果您有 aButton并应用您的自定义ButtonStyle,则可以对按钮的样式进行各种修改,但由于configuration.label不是 but 的实例TextButtonStyleConfiguration.Label我无法直接访问 apply tracking。有没有办法做到这一点而不必直接在Button's上设置它label View?这似乎是你应该能够做的事情,因为它是与风格相关的事情,但我不知道如何完成它。

public struct MyStyle: ButtonStyle {
    public func makeBody(configuration: Configuration) -> some View {
        configuration.label
          // (if I tried to put `.tracking` here it wouldn't work because it isn't Text)
          .foregroundColor(Color.red)
          .clipShape(Capsule())
          // … etc.
    }
}

ViewModifier 更改字体和跟踪外观〜相关但没有相关答案。

4

1 回答 1

3

是的,ButtonStyleConfiguration.Label不匹配Text,但这是您的风格,您可以忽略标准标签,并通过接口合同请求拥有,这正是您需要的(Text在这种情况下),如下面的演示

public struct MyStyle: ButtonStyle {
    let label: Text                   // << here !!

    public func makeBody(configuration: Configuration) -> some View {
        label               // << here !!
            .tracking(10)
            .foregroundColor(configuration.isPressed ? .black : .red)
            .clipShape(Capsule())
    }
}

并将其用作(或使用按钮生成器创建自己的按钮扩展来隐藏那些不需要的卷发)

Button(action: {
        // action here
    }){}
    .buttonStyle(MyStyle(label: Text("Hello")))

使用 Xcode 13.2 / iOS 15.2 测试

在此处输入图像描述

于 2022-01-14T22:06:07.700 回答