SwfitUI列表使滚动被禁用

时间:2019-11-13 11:37:35

标签: swift swiftui

有没有办法使SwiftUI中的列表不可滚动?

就像我们有

  

tableView.isScrollEnabled

6 个答案:

答案 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)
            }
        }
    }
}

here可以找到ForEach的好资源,here可以找到{{3}}的好资源。

答案 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)