有没有办法在自定义 SwiftUI ButtonStyle 中设置字体跟踪(即间距)?
Is there a way to set font tracking (i.e. spacing) inside a custom SwiftUI ButtonStyle?
在 SwiftUI 中,您可以使用 tracking
视图修饰符在 Text
View
上设置字体跟踪(字母间距):
Text("Hello, World!")
.tracking(10)
如果您有 Button
并应用您的自定义 ButtonStyle
,您可以对按钮的样式进行各种修改,但由于 configuration.label
不是Text
而是 ButtonStyleConfiguration.Label
,我无法直接申请 tracking
。有没有一种方法可以做到这一点而不必直接在 Button
的 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 to change both font and tracking 看起来~相关但没有相关答案。
是的,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
在 SwiftUI 中,您可以使用 tracking
视图修饰符在 Text
View
上设置字体跟踪(字母间距):
Text("Hello, World!")
.tracking(10)
如果您有 Button
并应用您的自定义 ButtonStyle
,您可以对按钮的样式进行各种修改,但由于 configuration.label
不是Text
而是 ButtonStyleConfiguration.Label
,我无法直接申请 tracking
。有没有一种方法可以做到这一点而不必直接在 Button
的 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 to change both font and tracking 看起来~相关但没有相关答案。
是的,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