我正在构建一个 SwiftUI 应用程序,其中包含一个下拉菜单,其中一个垂直 ScrollView 位于另一个垂直 ScrollView 中。但是,下拉菜单(嵌套菜单)不会滚动。我想以某种方式优先考虑它。这似乎是一个简单的问题,但我已经在互联网上搜索但找不到合适的解决方案。这是问题的基本代码(应用程序中的代码更干净,但复制和粘贴特定片段效果不佳):
ScrollView{
VStack{
(other stuff)
DropdownSelector()
(other stuff)
}
}
struct DropdownSelector(){
ScrollView{
VStack(alignment: .leading, spacing: 0) {
ForEach(self.options, id: \.self) { option in
(do things with the option)
}
}
}
Run Code Online (Sandbox Code Playgroud)
Geo*_*e_E 10
ScrollView
首先创建嵌套可能是一个坏主意。尽管如此,还是有一个解决方案。
因为ScrollView
它会滚动与内容高度一样多的内容,所以当它们嵌套时这是一个问题。这是因为内部的ScrollView
高度不受限制(因为外部的ScrollView
高度只是变化),所以它的表现就好像它根本不存在一样。
这是一个演示该问题的最小示例,仅供比较:
struct ContentView: View {
var body: some View {
ScrollView {
VStack {
Text("Top view")
DropdownSelector()
Text("Bottom view")
}
}
}
}
struct DropdownSelector: View {
var body: some View {
ScrollView {
VStack(alignment: .leading, spacing: 0) {
ForEach(0 ..< 10) { i in
Text("Item: \(i)")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
要修复此问题,请限制内部滚动视图的高度。添加此后DropdownSelector()
:
.frame(height: 100)
Run Code Online (Sandbox Code Playgroud)