Список, который прокручивается до определенной строки при нажатии кнопки в приложении SwiftUI

В приложении SwiftUI я пытаюсь создать список, который автоматически переходит к следующей строке при нажатии кнопки.

По-видимому, эта функция в настоящее время невозможна со списком SwiftUI, но с UITableView с использованием метода scrollToRowAtIndexPath, как указано в части № 3 этого ответа 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)
        }
    }
}

person Ryan    schedule 05.06.2020    source источник


Ответы (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#>)
        }
person BokuWaTaka    schedule 05.06.2020
comment
Я бы рекомендовал использовать эту библиотеку для любых представлений SwiftUI, которые еще не имеют возможностей, которые есть в UIKit. - person BokuWaTaka; 06.06.2020