无法在 SwiftUI 中的菜单内设置按钮标签的颜色
Posted
技术标签:
【中文标题】无法在 SwiftUI 中的菜单内设置按钮标签的颜色【英文标题】:Cannot set color of Button's Label inside Menu in SwiftUI 【发布时间】:2021-02-18 11:56:09 【问题描述】:如果我在 SwiftUI (ios) 中创建 Menu,我无法设置内部按钮的颜色,例如:
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)
如果我使用Text
或Image
(我知道this)代替Label
,它也不起作用。
有什么办法吗?
P.S.:还有一个related SO question,但它非常通用,范围更广。
【问题讨论】:
您无法在 SwiftUI 2.0 中更改默认的Menu
按钮样式、颜色等。您可以尝试构建自己的自定义Menu
。
您发布的链接指向 Apple 的示例代码,了解如何使用 UIKit
创建您自己的。遵循这一点,然后将其包装成 UIViewControllerRepresentable
或 UiViewRepresentable
以使其在 SwiftUI 中工作。
【参考方案1】:
现在可以在 iOS 15 中通过设置 Button
的角色来实现。 Documentation
例子:
Menu("Actions")
Button(role: .destructive, action: )
Label("Whatever", systemImage: "pencil")
结果:
【讨论】:
我希望 iOS 14 有一个解决方法,而无需求助于 UIKit。不管怎么说,还是要谢谢你。我真的很讨厌为了克服 SwiftUI 的缺陷,我必须使用更高版本的操作系统本身...... @noe 是的,有时您只需要在某些部分使用 UIKit。我最近有一个问答here,实际上是为了创建一个自定义上下文菜单。我用ScrollView
做内省,然后用scrollView.subviews.first!.addInteraction(/* interaction delegate instance */)
添加UIContextMenuInteraction
。您可能会发现实现 iOS 14 版本的上下文菜单很有用。
谢谢!我去看看。以上是关于无法在 SwiftUI 中的菜单内设置按钮标签的颜色的主要内容,如果未能解决你的问题,请参考以下文章
编译器无法在 SwiftUI 中的合理时间内对该表达式进行类型检查?