SwfitUI 列表禁用滚动

Ars*_*sim 8 swift swiftui

有没有办法让 SwiftUI 中的 List 不可滚动?

就像我们有

tableView.isScrollEnabled

sar*_*unw 12

在 iOS 16 中,您可以通过添加.scrollDisabled(true).

List {
    // ...
}
.scrollDisabled(true)
Run Code Online (Sandbox Code Playgroud)


And*_*rew 8

而不是使用Listwhich 是可滚动的,而是使用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)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

一个很好的资源ForEach可以在这里找到同样的一个List可以在这里找到。


Ell*_*ies 8

在 iOS 16 及更高版本之前,没有一个优雅的解决方案,您可以使用 .scrollDisabled(true)

否则,唯一对我有用的就是将 .simultaneousGesture(DragGesture(minimumDistance: 0), 包括:.all) 添加到列表中。


Ole*_*lov 7

简化 YannSteph 的回答:

List {
    ...    
}
.onAppear {
    UITableView.appearance().isScrollEnabled = false
}
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用 (6认同)
  • 这很有效 - 但副作用是它适用于 ContentView 中的所有列表。这对我的应用程序来说没问题,但似乎它应该只影响您应用它的列表 (4认同)

Yan*_*eph 5

这是我的扩展,用于在列表中禁用滚动。

extension View {
    
    func hasScrollEnabled(_ value: Bool) -> some View {
        self.onAppear {
            UITableView.appearance().isScrollEnabled = value
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

例子:

List {
    ...
}.hasScrollEnabled(false)
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这似乎也影响了同一导航视图中的其他列表。 (5认同)