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

时间:2020-06-05 19:20:56

标签: swift iphone uitableview swiftui swiftui-list

在SwiftUI应用中,我试图创建一个列表,当按下按钮时该列表会自动滚动到下一行。

显然,SwiftUI列表当前无法使用此功能,但此答案的第3部分中提到的UITableView使用scrollToRowAtIndexPath方法使用了https://stackoverflow.com/a/58830883/11698443此答案已得到很好的解释,但并不建议如何使用实施他们所说的最佳解决方案。

以下是该列表在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)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

签出这个漂亮的库https://github.com/siteline/SwiftUI-Introspect。有了它,您可以执行以下操作:

import Introspect

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