SwiftUI 菜单从上到下的顺序根据上下文而变化?

Chr*_*nce 4 swift swiftui ios14

我想我知道这个问题的答案,但我会把它作为一个问题提出并给出我的答案,因为这对我来说有点令人困惑,并且我花了一些时间才弄清楚。

我刚刚开始Menu在 SwiftUI 中使用 's 。在我的第一个应用程序中,我在应用程序的导航栏中使用了它们。

            Menu {
                ForEach(pickers, id: \.mediaPickerUIDisplayName) { picker in
                    Button(action: {
                        viewModel.sheetToShow = .picker(picker)
                    }) {
                        Text(picker.mediaPickerUIDisplayName)
                    }.enabled(picker.mediaPickerEnabled)
                }
            } label: {
                SFSymbolIcon(symbol: .plusCircle)
            }
Run Code Online (Sandbox Code Playgroud)

看起来不错。

在此输入图像描述

然后,我更改了使用相同代码的上下文。我没有在导航栏中使用它,而是在屏幕中央使用它。相反,我看到:

在此输入图像描述

我感到不安的是,列表中项目从上到下的顺序发生了变化。

gm_*_*gm_ 6

[更新]\n在撰写本文时,在 iOS16(测试版)中,您现在可以使用新的修饰符.menuOrder(.fixed)。这将使您的项目顺序保持固定,顾名思义\xe2\x80\xa6

\n

是的。这是我个人认为非常糟糕的 \xe2\x80\x98native\xe2\x80\x99 行为。想象一下,您的删除按钮位于底部,突然没有任何警告,顺序发生变化只是因为元素已移动到中线上方/下方。\n肌肉记忆将会启动,用户会感到非常困惑。\n这是一个灾难性的遗漏结果。

\n