如何设置以下按钮项的排序顺序(忽略和引脚)?它没有按菜单列表中的确切排序顺序显示。我认为os本身正在更新排序顺序。是否有任何选择来限制同样的?
结构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() { }}发布于 2022-06-07 06:41:58
Xcode 14 / iOS 16 / macOS 13 /.
现在我们有了环境价值来管理这一点:
var body: some View {
Menu {
// .. buttons here
}
.environment(\.menuOrder, .fixed) // << here !!
}发布于 2022-04-04 13:04:56
这感觉就像一种力量,但我解决了它,通过GeometryReader获得菜单的全局y位置,并在屏幕的顶部或底部设置顺序。
您点击菜单(顶部或底部)的位置决定了菜单中元素的顺序,所以我使用了这个特性。
import SwiftUI
struct ContentView: View {
var body: some View {
ScrollView {
GeometryReader { geometry in
Menu("show menu") {
// get global position
let frame = geometry.frame(in: .global)
// top or bottom
let isTop = frame.midY <= UIScreen.main.bounds.height/2
if isTop {
Button("first button", action: {})
Button("second button", action: {})
}
else {
Button("second button", action: {})
Button("first button", action: {})
}
}
}
.padding(.vertical, 800)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}发布于 2021-04-16 13:05:55
更新
正如Asperi所提到的,在iOS 16 & macOS 13 https://developer.apple.com/documentation/swiftui/text/menuorder(_:)中是可能的
iOS 15和macOS 12及更低版本的原始答案
您的代码是完全正确的,并且工作非常完美。您所遇到的问题可能与这样一个事实有关,即第一个菜单项总是最接近用户使用的触发Menu的Menu。(示例中的“Menu标签”)。
因此,如果点击的对象在屏幕上很低,那么系统可能会显示上面的菜单而不是点击下面的菜单。当它这样做的时候,它就颠倒了顺序。
对于2个Menu项,这一点可能并不清楚(因为如果将它们反转,它可能看起来是顺序的随机变化),但如果添加更多,您将看到订单保持不变,但整个Menu可能会显示在按常规顺序的抽头下面,或者显示在具有反向顺序的抽头之上。
https://stackoverflow.com/questions/67124144
复制相似问题