как прокрутить форму до определенного элемента пользовательского интерфейса в SwiftUI

#ios #swift #swiftui #swiftui-form

#iOS #swift #swiftui #swiftui-форма

Вопрос:

у меня есть форма в SwiftUI NavigationView. В форме нет специальных элементов, кроме стандартных: текстовое поле, указатель даты и несколько кнопок

я хотел бы программно прокрутить до определенного элемента. как я могу это сделать?

ScrollViewReader, похоже, не работает с формами.

 ScrollViewReader { p in
  Form {
    ....
    Button(action: {
      p.scrollTo(150)
    }) {
      Text(self.label)
    }
}
 

Комментарии:

1. Не могли бы вы подготовить минимальный воспроизводимый пример? Это работает, в вашем коде могут быть некоторые нюансы. Они id должны присутствовать, быть уникальными и соответствовать тому, к чему вы прокручиваете.

2. точно, идентификатор отсутствовал, я думал, что scroll to — это позиция

Ответ №1:

Дайте идентификатор каждому элементу и передайте этот идентификатор .scrollTo(id) методу. Вот так

 struct ContentView: View {
    var body: some View {
        
        ScrollViewReader { p in
            Form {
                Button(action: {
                }) {
                    Text("Top")
                }.id(150)
                
                ForEach(0..<30) { index in
                    Text("(index)")
                        .id(index)
                }
                Button(action: {
                    p.scrollTo(150)
                }) {
                    Text("Scroll")
                }
            }
        }
    }
}
 

Комментарии:

1. я думаю, что ScrollViewReader должен находиться внутри формы, но тогда все элементы ведут себя так, как будто они не в форме

2. Я тестировал с Xcode 12.1 iOS 14.1. с какими проблемами вы сталкиваетесь?

3. да, это работает, извините, я ввел идентификатор не в тот элемент