在 SwiftUI 应用程序中按下按钮时滚动到特定行的列表

List that scrolls to certain row when button pressed in SwiftUI app

在 SwiftUI 应用程序中,我正在尝试创建一个列表,该列表在按下按钮时自动滚动到下一行。

显然,SwiftUI List 目前无法实现此功能,但 UITableView 可以使用此答案第 3 部分中提到的 scrollToRowAtIndexPath 方法 这个答案解释得很好,但没有建议如何实施他们描述的最佳解决方案。

下面是列表在 SwiftUI 中的外观的一些示例代码。目标是按下按钮,然后列表滚动到下一行。我认为解决方案需要与 UIKit 接口才能工作。如果有人能弄清楚如何以最干净的方式做到这一点,那就太棒了。不幸的是,这不能使用所有 SwiftUI 来完成。

提前感谢任何认为他们可以解决这个问题的人。

import SwiftUI

struct ScrollingList: View {
    var body: some View {
        List(0 ..< 10) { item in
            VStack {
                Text("\(item)")

                Button(action: {}) {
                Text("Scroll To Next Item")
                }
            }
            .frame(height: 500)
            .background(Color.blue)
        }
    }
}

看看这个漂亮的图书馆,https://github.com/siteline/SwiftUI-Introspect。有了它你可以这样做:

import Introspect

List {
  Text("some")
  Text("list")
}.introspectTableView { tableView in
          tableView.scrollToRowAtIndexPath(<#IndexPath#>, atScrollPosition: <#UITableView.ScrollPosition#>, animated: <#Bool#>)
        }