无法在 SwiftUI 的菜单中设置按钮标签的颜色

Cannot set color of Button's Label inside Menu in SwiftUI

提问人:noe 提问时间:2/18/2021 最后编辑:noe 更新时间:5/11/2023 访问量:5476

问:

如果我在 SwiftUI (iOS) 中创建菜单,我无法设置里面按钮的颜色,例如:

Menu("Actions") {
    Button(action: { }) {
        Label("Whatever", systemImage: "pencil")
             .background(Color.red)  // does not work
    }
    .background(Color.red)           // does not work either
    .buttonStyle(RedButtonStyle())   // does not work either
}

struct RedButtonStyle: ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.label.foregroundColor(Color.red)
    }
}

如果不是,我使用 ,或者(我知道这一点),它也不起作用。LabelTextImage

有什么办法吗?

P.S.:还有另一个相关的 SO 问题,但它非常笼统且范围更广。

iOS Swift SwiftUI 菜单

评论

2赞 egeeke 2/18/2021
您无法在 SwiftUI 2.0 中更改默认的按钮样式、颜色等。您可以尝试构建自己的自定义。MenuMenu
1赞 lorem ipsum 2/18/2021
您发布的链接指向 Apple 的示例代码,该代码介绍了如何使用 创建自己的 .然后将其包装成 a 或 a 以使其在 SwiftUI 中工作。UIKitUIViewControllerRepresentableUiViewRepresentable

答:

17赞 George 8/6/2021 #1

现在,在 iOS 15 中,可以通过设置 的角色来实现这一点。文档Button

例:

Menu("Actions") {
    Button(role: .destructive, action: { }) {
        Label("Whatever", systemImage: "pencil")
    }
}

结果:

Result

评论

1赞 noe 2/16/2022
我希望 iOS 14 有一种解决方法,而无需求助于 UIKit。无论如何,谢谢。我真的很讨厌为了克服 SwiftUI 的缺陷,我必须使用更高版本的操作系统本身......
0赞 George 2/16/2022
@noe是的,有时您只需要将 UIKit 用于某些部分即可。我最近在这里有一个问答,我实际上是为了创建一个自定义上下文菜单而制作的。我用 thing 做 Introspect,然后添加一个 .您可能会发现这对于实现 iOS 14 版本的上下文菜单很有用。ScrollViewUIContextMenuInteractionscrollView.subviews.first!.addInteraction(/* interaction delegate instance */)
0赞 noe 2/16/2022
谢谢你!我会检查一下。
0赞 JAHelia 1/10/2023
我无法将字体设置为红色以外的自定义字体或颜色
1赞 George 1/10/2023
@JAHelia 虽然更多的自定义是件好事,但使用“普通”或红色以外的东西作为破坏性操作将是一个不寻常的用户体验