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

Posted

技术标签:

【中文标题】SwiftUI 菜单按钮最初显示为禁用【英文标题】:SwiftUI Menu Button Displayed as Disabled Initially 【发布时间】:2021-01-06 19:24:17 【问题描述】:

在 macOS 上,。单击它们后,它们将正常激活并正确显示。这段代码复制了这个问题:

Menu 
    Button("First")  
    Button("Second")  
 label: 
    Image(systemName: "gearshape.fill")

.padding()

最初看起来像这样:

然后点击按钮后:

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

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

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

【问题讨论】:

有同样的问题。也有兴趣看到答案。 在12.0上测试代码,看来问题已经解决了! 是的,我正在 macOS 12.1 上进行测试,该错误似乎已修复。感谢@Taylor 的提醒 【参考方案1】:

此错误(归档为 FB8976414)在 macOS 11.3 中仍然存在。不过,我从@kontiki 那里得到了一些解决方法的帮助。如果您将ButtonMenu 一起包含,它会显示正确启用。不要问我为什么。您可以将 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)

-- 更新 2--

根据@Taylor(由我在 macOS 12.1 中验证)从 macOS 12.0 开始,该错误已修复。谢谢 Apple 工程师!

【讨论】:

在我的情况下,在 10.4 上,菜单在加载时启用外观,但是在选择选项后变为禁用外观。

以上是关于SwiftUI 菜单按钮最初显示为禁用的主要内容,如果未能解决你的问题,请参考以下文章

使用 SwiftUI 为启用/禁用按钮设置颜色的最智能方法

最初输入字段不是强制性的,但仍然禁用提交按钮?

SwiftUI ActionSheet 禁用按钮

SwiftUI 2.0 在 macOS 上禁用窗口的缩放按钮

SwiftUI 列表禁用单元格按下

SwiftUI - 在禁用的 SecureField 中检测水龙头?