Есть ли способ установить отслеживание шрифта (т.е. интервал) внутри пользовательского SwiftUI ButtonStyle?
В SwiftUI вы можете установить отслеживание шрифта (расстояние между буквами) с помощью модификатора View:
Text("Hello, World!")
.tracking(10)
Если у вас есть и применить свой пользовательский
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 для изменения как шрифта, так и отслеживания выглядит ~ связанно, но нет соответствующего ответа.
1 ответ
Да,
ButtonStyleConfiguration.Label
не соответствует , но это ваш стиль, вы можете игнорировать стандартную метку, и запросить свой интерфейсный контракт, который вам нужен (
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