SwiftUI 菜单按钮最初显示为禁用

smr*_*smr 7 macos swiftui

在 macOS 上,SwiftUI 菜单按钮最初显示为禁用。一旦您单击它们,它们就会正常激活并正确显示。此代码复制了该问题:

Menu {
    Button("First") { }
    Button("Second") { }
} label: {
    Image(systemName: "gearshape.fill")
}
.padding()
Run Code Online (Sandbox Code Playgroud)

最初看起来像这样:

在此输入图像描述

然后点击按钮后:

在此输入图像描述

  • 预览显示正确,但正在运行的应用程序的行为如上
  • 菜单的内容似乎不影响结果
  • .disabled(false)尝试使用;明确地破坏禁用状态 没有快乐,因为它并没有真正被禁用

我可以只设置图像的前景色,但我希望找出真正的问题。我错过了什么吗?

编辑:设置前景也不起作用。仍然明显残疾。

smr*_*smr 2

此错误(归档为 FB8976414)自 macOS 11.3 起仍然存在。不过,我从@kontiki 那里得到了一些解决方法的帮助。Button如果您将与 一起包含Menu,则它会显示正确启用。别问我为什么。您可以将其设置Button为零大小,这样它就不会影响您的布局,并且在(如果?)错误得到修复时将其删除。

- 更新 -

从 macOS 11.4 开始,此技术不再有效。Menu在单击之前始终显示为禁用。我想如果你往好的方面看,至少会更加一致!

---

HStack(spacing: 0) {
    Menu {
        Button("First") { }
        Button("Second") { }
    } label: {
        Image(systemName: "gearshape.fill")
    }

    Button("", action: {}).scaleEffect(x: 0, y: 0)
}
Run Code Online (Sandbox Code Playgroud)

-- 更新2 --

根据 @Taylor 的说法,从 macOS 12.0 开始(经我在 macOS 12.1 中验证),该错误已修复。谢谢苹果工程师!