避免在 SwiftUI 中设置按钮样式

iAl*_*x11 5 ios swift swiftui

我正在使用 Apple 的 SwiftUI 框架创建一个 iOS 应用程序。因为我需要检测用户是否点击了屏幕的特定区域,所以我显然使用了一个按钮。

问题是该区域包含一个图像和一个文本,并且当按钮自动为其内容赋予蓝色时,图像也被着色,因此它不是图像,而是一个蓝色圆角矩形。

据说一张图片值一千字,我不擅长解释,这里有一个图形演示会发生什么:

按钮外(无按钮样式) 没有按钮样式

按钮内部(带按钮样式) 带按钮样式

发生这种情况是因为按钮正在添加.foregroundColor(.blue)到图像中。

如何避免/禁用按钮向其组件添加样式?

编辑:这是我的按钮代码:

ContentView.swift

Button(action: {/* other code */}) {
                    PackageManagerRow(packageManager: packageManagersData[0])
                }
Run Code Online (Sandbox Code Playgroud)

PackageManagerRow.swift

struct PackageManagerRow : View {
    var packageManager : PackageManager

    var body: some View {
        VStack {
            HStack {
                Image(packageManager.imageName)
                    .resizable()
                    .frame(width: 42.0, height: 42.0)
                Text(verbatim: packageManager.name)
                Spacer()
                Image(systemName: "checkmark")
                    .foregroundColor(.blue)
                    .opacity(0)
            }.padding(.bottom, 0)
            Divider()
                .padding(.top, -3)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Fog*_*ter 10

我认为这是来自您正在使用的图像的渲染模式。

你在哪里Image("Cydia logo")(或其他)。

您应该设置渲染模式,例如...

Image("Cydia Logo").renderingMode(.original)
Run Code Online (Sandbox Code Playgroud)


Ccl*_*emm 10

PlainButtonStyle()您还可以向按钮添加以避免 iOS 风格的行为。

与你的例子类似:

Button(action: {/* other code */}) {
                    PackageManagerRow(packageManager: packageManagersData[0])
                }.buttonStyle(PlainButtonStyle())
Run Code Online (Sandbox Code Playgroud)

我希望它能帮助你!