Сделайте ScrollViewReader прокруткой до элемента, используя список и идентифицируемый протокол в SwiftUI.

Я не могу заставить ScrollViewReader прокручивать мой список (). Я прочитал много дискуссий , например это или это

Я использую модель с протоколом Identifiable и идентификатором Int:

      struct Country: Identifiable, Codable, Hashable {

        // database fields
        var id: Int64?
        var name: String
}

Моя точка зрения сейчас такая:

                  ScrollViewReader { proxy in
                    VStack {
                            Button(action: {
                                    proxy.scrollTo(38) // just a test
                            })
                            { Text("Jump to") }
                                 
                            List() {
                                    ForEach(countries) { country in

                                            Button (action: {
                                                    wine.countryId = country.id
                                                    // pop
                                                    self.mode.wrappedValue.dismiss()
                                            }) {
                                                    // cell content
                                                    HStack {
                                                            Image(country.flag).resizable().frame(width: 24.0, height: 24.0)
                                                            Text(country.name)
                                                    }
                                            }
                                            //.id(country.id)
                                       }
                                }
                        
                        }
                }
    }

Я пробовал использовать .id()чтобы безуспешно идентифицировать каждую строку / кнопку. Я не знаю нужно ли мне id() в качестве ForEach() используйте протокол идентификации страны для идентификации каждого предмета.

Одна важная вещь: страны НЕ отображаются в логическом порядке (1,2,3...) их идентификатора переменной. Но даже с id(country.id) модификатор, он никогда не прокручивается до правой строки / кнопки списка.

В большинстве примеров, которые мы можем найти в Интернете, используется простая итерация индекса для строк, а не реальная модель с struct ().

1 ответ

Решение

Типы совпадающих идентификаторов должны быть такими же, как и ваш id является Optional затем в scrollTo он также должен быть необязательным, например

      Button(action: {
   proxy.scrollTo(Optional(Int64(38))) // << here !!
})

Протестировано с вашим реплицированным снимком на Xcode 13 / iOS 15

Другие вопросы по тегам