有没有办法使SwiftUI中的列表不可滚动?
就像我们有
tableView.isScrollEnabled
答案 0 :(得分:3)
虽然使用VStack + ForEach可以解决问题,但缺点之一是当单击一行时,单击反馈不再是您期望的表格视图(背景不会突出显示),因此它可能并不是基于UX期望的合适解决方案。
另一种方法是使用此第三方库:
https://github.com/siteline/SwiftUI-Introspect
然后您就可以
List {
// ...
}
.introspectTableView { tableView in
tableView.isScrollEnabled = false
}
答案 1 :(得分:1)
使用List
而不是使用可滚动的ForEach
。
ForEach
默认情况下不可滚动。
以下是使用ForEach
struct ContentView: View {
let colors: [Color] = [.red, .green, .blue]
var body: some View {
VStack {
ForEach(colors, id: \.self) { color in
Text(color.description.capitalized)
.padding()
.background(color)
}
}
}
}
答案 2 :(得分:0)
我很确定这也会禁用内容,但是您可以:
List {
// ...
}.disabled(true)
SwiftUI中非常缺少ScrollView API,因此您可能需要使用UIViewRepresentable
。
答案 3 :(得分:0)
这是我的扩展程序,用于在列表上禁用滚动。
extension View {
func hasScrollEnabled(_ value: Bool) -> some View {
self.onAppear {
UITableView.appearance().isScrollEnabled = value
}
}
}
示例:
List {
...
}.hasScrollEnabled(false)
答案 4 :(得分:0)
简化YannSteph的答案:
List {
...
}
.onAppear {
UITableView.appearance().isScrollEnabled = false
}
答案 5 :(得分:-2)
这将禁用当前列表膨胀中的所有子视图移动
List {
// ...
}.moveDisabled(true)