提问人:Yiming Designer 提问时间:11/14/2023 更新时间:11/14/2023 访问量:32
使用 Swift 以编程方式控制浮动列表(如下拉列表)
Programmatically controled Floating List (like drop-down list) with Swift
问:
我正在使用 macOS 的 SwiftUI 开发一个应用程序,在此期间我需要一个浮动列表(例如下拉列表的列表框,以及在 SwiftUI 中,如下面的屏幕截图所示)。此外,它应该以编程方式显示和隐藏。Picker
Menu
总之,我需要一个列表视图,它:
具有列表框行为:
Picker
- 当我单击其他地方时自动隐藏列表。
- 不需要硬编码的高度。它可以适应列表内容的高度。当内容的高度高于全屏时,它会变成滚动列表。
通过代码隐藏和显示。
使用代码控制选择指示器(蓝色行背景)。例如,“向上箭头”和“向下箭头”进行选择,“回车”进行选择。
首次尝试:SwiftUI 原生控件
根据这篇文章如何在 SwiftUI 中以编程方式显示菜单。没有合适的视图,我也找不到。
显示列表并需要单击按钮,该按钮无法以编程方式控制。建议的,就像警报视图一样,完全不适合我的情况。Picker
Menu
.confirmationDialog
第二次尝试:.overlay{}
Text("Click Me")
.onTapGesture { isPresented.toggle() }
.overlay {
if isPresented {
ScrollView {
VStack {
ForEach(1..<30) {
Text("#\($0)")
}
}
}
//.frame(height: 300) // must set height
}
}
但是,除非我为它硬编码高度,否则列表不会超出父视图的大小。
第三次尝试:.popover
@State var selection: Int = 0
Text("Selection: \(selection)")
.onTapGesture {
isPresented.toggle()
}
.popover(isPresented: $isPresented, arrowEdge: .bottom) {
ScrollView {
VStack(spacing: 0) {
ForEach(0..<30, id: \.self) { num in
Button {
selection = num
isPresented = false
} label: {
Text("#\(num)")
}
.listRowSeparator(.hidden)
}
}
}
.scrollIndicators(.never)
.buttonStyle(MenuButtonStyle())
.padding(4)
}
更好,但有一些问题,如果可以解决,那就再好不过了:
列表将要从计算机屏幕中出来,它变成了一个滚动列表。但是,没有箭头指示器直观地告诉您可以向下滚动。(预期结果如下图所示)
弹出框视图的动画和指示箭头很烦人,我发现无法在 SwiftUI 中删除它们。
第四次尝试:向其他框架寻求帮助
我正在从其他 UI 框架中搜索一些解决方案,例如 ,但我只有 SwiftUI 的经验,对其他人不太熟悉。我找不到合适的视图。AppKit
真诚期待您的帮助!:)
答: 暂无答案
评论