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