点击时 SwiftUI 按钮不会变灰

The*_*anu 5 button background-color ios swiftui

我真的很想理解一些事情。我想创建一个带有一些文本的按钮。该按钮有一个框架和一个颜色(颜色与背景相同)。当我点击该按钮时,我希望产生一些效果(整个按钮某种变色)。如果颜色与背景相同,则点击期间文本的颜色会有所不同。如果我有一个红色背景的按钮,则会对整个按钮产生效果。我附上了一张图片,展示了事情应该是什么样子。

点击按钮之前应如下所示:

在此输入图像描述

当用户按下按钮(不释放)时,按钮如下所示: 在此输入图像描述

就我而言,红色矩形颜色与背景颜色相同。但我想要相同的矩形叠加。相反,我得到以下内容。

点击之前:

在此输入图像描述

点击期间:

在此输入图像描述

在这种情况下,只有数字有某种覆盖。但矩形则不然。

这是代码。如果按钮的颜色与背景颜色相同,我应该更改什么才能获得相同的反馈?

Button(action: {
    some action
}){
    Text("1")
        .font(.title)
        .foregroundColor(.blue)
        .frame(width: 80, height: 48)
        .background(Color.white)
        .cornerRadius(4)
}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 5

我不能说这理解了您到底想要实现什么,但是可以借助按钮样式来完成按下按钮时的不同视觉反馈。在样式中,我们可以访问isPressed状态,因此可以根据状态有条件地更改按钮的呈现。

这是一些应该有帮助的演示

Button(action: {
    some action
}){
    Text("1")
}
.buttonStyle(MyButtonStyle())

struct MyButtonStyle: ButtonStyle {

    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
        .font(.title)
        .foregroundColor(configuration.isPressed ? .white : .blue) // << ex. !!
        .frame(width: 80, height: 48)
        .background(configuration.isPressed ? Color.clear : Color.white)   // << ex. !!
        .cornerRadius(4)
    }
}
Run Code Online (Sandbox Code Playgroud)