我在使用自定义ButtonStyle
与SwiftUI中的Button
时,遇到了一种奇怪的行为。
我的目标是创建一个带有某种“推回动画”的自定义ButtonStyle
。 我使用以下设置:
struct CustomButton<Content: View>: View {
private let content: () -> Content
init(content: @escaping () -> Content) {
self.content = content
}
var body: some View {
VStack {
Button(action: { ... }) {
content()
}
.buttonStyle(PushBackButtonStyle(pushBackScale: 0.9))
}
}
}
private struct PushBackButtonStyle: ButtonStyle {
let pushBackScale: CGFloat
func makeBody(configuration: Self.Configuration) -> some View {
configuration
.label
.scaleEffect(configuration.isPressed ? pushBackScale : 1.0)
}
}
// Preview
struct Playground_Previews: PreviewProvider {
static var previews: some View {
CustomButton {
VStack(spacing: 10) {
HStack {
Text("Button Text").background(Color.orange)
}
Divider()
HStack {
Text("Detail Text").background(Color.orange)
}
}
}
.background(Color.red)
}
}
现在,当我尝试点击
我所发现的:
- 当您删除
.buttonStyle(...)
时,它会按预期工作(当然不包括自定义动画) - 或者当您在
CustomButton
中的VStack
上设置.background(Color.red))
时,它也会与.buttonStyle(...)
结合使用按预期工作
现在的问题是是否有更好的方法来正确解决此问题或修复它?