SwiftUI 中是否有设置菜单项顺序的选项?

Job*_*oby 5 menu swiftui

如何设置以下按钮项目的排序顺序(忽略和固定)?它没有以菜单列表中的确切排序顺序显示。我认为操作系统本身正在更新排序顺序。有什么选项可以限制相同吗?

结构ContentView:视图{

var body: some View {
    Menu {
            Button(action: {
    self.self.placeOrder()
}) {
    HStack {
        Text("Ignore")
            .multilineTextAlignment(.leading)
        Image("Menu_Ignore")
            .renderingMode(.original)
    }
}

Button(action: {
    self.adjustOrder()
}) {
    HStack {
        Text("Pin")
            .multilineTextAlignment(.leading)
        Image("Menu_Pin")
            .renderingMode(.original)
    }
}
    } label: {
        Label("Options", systemImage: "paperplane")
    }
}

func placeOrder() { }
func adjustOrder() { }}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 15

Xcode 14 / iOS 16 / macOS 13 / ... 中的新增功能

现在我们有环境价值来管理这个:

var body: some View {
    Menu {
       // .. buttons here
    }
    .environment(\.menuOrder, .fixed)     // << here !!
}
Run Code Online (Sandbox Code Playgroud)


ram*_*nok 3

更新

正如 Asperi 提到的,在 iOS 16 和 macOS 13 中是可能的 https://developer.apple.com/documentation/swiftui/text/menuorder(_:)

iOS 15 和 macOS 12 及更低版本的原始答案

你的代码完全没问题,并且运行完美。您遇到的问题可能与以下事实有关:第一个菜单项始终显示最接近View用户点击以触发Menu. (Menu您的示例中的“标签”)。

因此,如果点击的对象位于屏幕下方,则系统可能会在点击上方而不是下方显示菜单。当它这样做时,它会颠倒顺序。

对于 2 个项目,这可能不清楚Menu(因为如果您颠倒它们,它可能看起来像是顺序的随机更改),但如果您添加更多项目,您会发现顺序保持不变,但整体Menu可能会显示在水龙头下方按正常顺序或按相反顺序按水龙头上方。