如何将部分添加到列表并在侧面滚动部分

How do I add sections to list and have section scroll on the side

我对此一窍不通,需要帮助。我正在尝试按字母顺序组织我的列表,并按字母将其分成多个部分。此外,我希望用户可以选择在侧面设置滚动条。我非常希望它看起来像联系人应用程序一样工作。有没有一种简单的方法可以将其编码到我的应用程序中?

我的应用程序也将使用俄语

struct ContentView: View {
var psalms: [Psalm] = PsalmData.topTen
var body: some View {
    NavigationView {
        List (psalms, id: \.id){ psalm in
                NavigationLink(destination: PsalmDetail(psalm: psalm)) {
                    Text(psalm.title)
                        .lineLimit(1)
                }
                .navigationTitle(Text("Оглавление"))
                .navigationBarTitleDisplayMode(.inline)
        }
    }
}
struct Psalm: Identifiable {
let id = UUID()
let title: String
let letter: String
let location: String
let object: String 

结构 PsalmData{

static let topTen = [
    Psalm(title: "А КОГДА ОН ПРИБЛИЗИЛСЯ",
          letter: "А",
          location: "Лук 19.37-40",
          object: "А когда Он приблизился к спуску с горы Елеонской, все множество учеников начало в радости велегласно славить Бога за все чудеса, какие видели они, говоря: благословен Царь, грядущий во имя Господне мир на небесах и слава в вышних! И некоторые фарисеи из среды народа сказали Ему: Учитель! Запрети ученикам Твоим. Но Он сказал им в ответ: сказываю вам, что если они умолкнут то камни возопиют."),
    Psalm(title: "БЛАЖЕН МУЖ",
          letter: "Б",
          location: "Пс.1",
          object: "Блажен муж, который не ходит на совет нечестивых и не стоит на пути грешных и не сидит в собрании развратителей, но в законе Господа воля его, и о законе Его размышляет он день и ночь! И будет он как дерево, посаженное при потоках вод, которое приносит плод свой во время свое, и лист которого не вянет; и во всем, что он ни делает, успеет. Не так - нечестивые; но они - как прах, возметаемый ветром с лица земли. Потому не устоят нечестивые на суде, и грешники – в собрании праведных. Ибо знает Господь путь праведных, а путь нечестивых погибнет."),
    Psalm(title: "БОЖЕ МОЙ! БОЖЕ МОЙ!",
          letter: "Б",
          location: "Пс.21.2-5",
          object: "Боже мой! Боже мой! для чего Ты оставил меня? Далеки от спасения моего слова вопля моего. Боже мой! я вопию днем, - и Ты не внемлешь мне, ночью, — и нет мне успокоения. Но Ты, Святый, живешь среди славословий Израиля. На Тебя уповали отцы наши; уповали, и Ты избавлял их."),
]

顺便说一下,我在 iPad 和 swift 游乐场

上做这个

我认为最好的方法是使用带有字母字典的分组列表。 Alphabetically sectioned list

要获得滚动条,您可以将列表包装在 ScrollViewReader 中。然后在每个部分添加一个 id (.id(_ id: Hashable)。这样,您就可以滚动到这些部分。

scrollViewProxy.scrollTo(_ id :Hashable)

将此与字典分段相结合:

struct AlphabeticalList: View {
var abc: [String] = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p",]

var body: some View {
    ScrollViewReader { scrollViewProxy in
        List {
            ForEach(abc, id: \.self) { section in
                Section(section) {
                    Text(section)
                }
                .id(section)
            }
        }
        .overlay(alignment: .trailing) {
            VStack {
                ForEach(abc, id: \.self) { section in
                    Button(section) {
                        scrollViewProxy.scrollTo(section, anchor: .top)
                    }
                }
            }
        }
    }
}
}