SwiftUI 列表不会在触控板上使用两指滑动滚动

问题描述

我一直在测试这个简单的 SwiftUI 代码:它在 ContentView 中有一个列表。当点击列表的一个单元格时,它会将一个 SecondList 推入导航堆栈。当这个 SwiftUI 代码在带有触控板的真实 iPad 上运行时,我使用两指滑动来上下滚动列表。 ContentView 中的列表平滑滚动。但是,对于 SecondList,它可能会随机冻结,然后没有响应。

它在 UIKit 项目中也失败了,我使用 UINavigationViewContentView 替换了 UIHostingViewController

它正在使用 iPadOS 14.5 在模拟器和 iPad Pro 硬件和妙控键盘上进行测试。

我该如何解决这个问题?谢谢。

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                ForEach(0..<30,id: \.self) { index in
                    NavigationLink(
                        destination: SecondList(),label: {
                            Text(String(index))
                        })
                }
            }
        }.navigationViewStyle(StackNavigationViewStyle())
    }
}

struct SecondList: View {
    var body: some View {
        List {
            ForEach(0..<30,id: \.self) { index in
                Text(String(index))
            }
        }
    }
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

解决方法

使用滚动视图

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                ForEach(0..<30,id: \.self) { index in
                    NavigationLink(
                        destination: SecondList(),label: {
                            Text(String(index))
                        })
                }
            }
        }.navigationViewStyle(StackNavigationViewStyle())
    }
}

struct SecondList: View {
    var body: some View {
        scrollView {
            List {
                ForEach(0..<30,id: \.self) { index in
                    Text(String(index))
                }
            }
        }
    }
}