我正在 macOS 上的 SwiftUI 中编写一个 ComboBox,并希望以灵活的方式以编程方式控制它,而不是单击按钮和列表显示。
我可以使用
Menu
创建一个参考 Apple Developer - Menu 的简单菜单,但找不到任何方法来以编程方式控制它,比如显示或隐藏它的列表。
然后我尝试用如下所示的
List
定制一个。但是当该列表显示时,它会发生并将其他视图向下推,这不像默认系统Menu
漂浮在以下视图前面。
VStack {
TextField("Ttitle", text: $string) { isEditing in
onEditing = isEditing
}
if onEditing { List(listItems, id:\.self) { Text($0) } }
}
如果有这样的方法再好不过了,但它不存在
SomeViewHere()
.menu(isPresented: $showMenu) {
Button("A") {}
Button("B") {}
Button("C") {}
}
此外,我在here找到了一个帖子,但它只适用于iOS。
我不熟悉AppKit,所以我不知道那里是否存在解决方案。但我也很高兴 AppKit 可以工作并且愿意学习它。不管怎样,我总是更喜欢使用原生的 SwiftUI。那么,关于如何实现这一点有什么想法吗?
参考这篇文章和这篇文章,我想出了如何将浮动列表带入生活。下面显示了一个自定义示例。
@State var showList: Bool = false
var body: some View {
Button("Click Me") { showList.toggle() }
.frame(width: 100, height: 20)
.overlay {
if showList {
List {
Button("AA") {}
Button("AA") {}
Button("AA") {}
}
.frame(width: 200, height: 300)
.offset(y: 160)
}
}
.zIndex(1)
Text("Hello World")
Circle().fill(.brown).frame(width: 50, height: 50)
}