gpt4 book ai didi

swift - 如何在透明度降低的 SwiftUI 中获取菜单项的重音背景?

转载 作者:行者123 更新时间:2023-12-04 13:39:19 25 4
gpt4 key购买 nike

使用 AppKit,您可以添加 NSMenuItem s 到 NSMenu .我看到SwiftUI中有类似NSMenu的东西,即 MenuButton .但我找不到任何关于它如何工作的文档。
我尝试了以下方法:

MenuButton("+") {
Button("New contact") { print("Create new contact") }
Button("New group") { print("Create new group") }
}
这给了我这个
an opened MenuButton
看起来差不多 但是 当我在系统首选项中启用“降低透明度”时
  • 按钮的背景颜色与菜单不同(注意菜单项上方和下方的颜色略浅)。
  • 当我悬停菜单项时,它们的背景颜色不会像普通的 macOS 菜单那样改变。见下图:

  • Highlighted menu item
    我还尝试使用 .background() 手动更改背景颜色修饰符,但这不会影响菜单项的全宽。
    MenuButton("+") {
    Button("New contact") { print("Create new contact") }
    .background(Color.accentColor)
    Button("New group") { print("Create new group") }
    }
    Menu with manually changed background
    我想这是因为我正在放置 Button MenuButton里面的s虽然它可能期待其他一些 SwiftUI 元素。我应该在 MenuButtons 中放置哪些元素来创建像下面这样的正常外观的 macOS 菜单?
    Correctly rendered MenuButton on Catalina
    [更新] macOS Big Sur
    我也在大苏尔尝试过这个。虽然背景渲染正确,但在 Big Sur 中,文本颜色现在乱七八糟。 🤯
    Incorrectly highlighted menu on Big Sur

    最佳答案

    我想我通过配置 ButtonStyle 找到了部分解决方案。并将其应用于 MenuButton通用结构。但是请注意 .foregroundColor 的条件变化不是由个人的Button()继承的的 Text() .颜色也不对。

    也许有人想改进这一点。

    struct DetectHover: ButtonStyle {
    @State private var hovering: Bool = false

    public func makeBody(configuration: DetectHover.Configuration) -> some View {
    configuration.label
    .foregroundColor(self.hovering ? Color.white : Color.primary)
    .background(self.hovering ? Color.blue : Color.clear)
    .onHover { hover in
    self.hovering = hover
    }
    }
    }

    MenuButton(label: Image(nsImage: NSImage(named: NSImage.actionTemplateName)!)) {

    // Buttons

    }.buttonStyle(DetectHover())

    result

    关于swift - 如何在透明度降低的 SwiftUI 中获取菜单项的重音背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59837991/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com