行为1: 我要先准备文本,然后再列出所有元素,并让所有内容连贯地滚动。我尝试过在许多方面更改代码,最终导致出现不同的错误行为。 这是behavior_1的代码:
struct Thing: Hashable {
var name: String
var number: Int
}
struct SummaryView: View {
var things = [Thing(name: "Paul", number: 42),Thing(name: "Jackie", number: 41),Thing(name: "James", number: 49),Thing(name: "Paola", number: 22)]
var body: some View {
VStack(alignment: .leading){
Text("Text 1")
Text("Text 2")
Text("Text 3")
Text("Text 4")
List{
ForEach(self.things, id: \.self){ thing in
VStack(alignment: .leading){
Text(thing.name)
Text("\(thing.number) Years")
.foregroundColor(Color.blue)
}
.padding()
.frame(minWidth: 0, maxWidth: .infinity, alignment: Alignment.leading)
}
}
Spacer()
NavigationLink(destination: Text("HI")){
Text("Finished")
}
}.edgesIgnoringSafeArea(.bottom)
}
}
这样可以使屏幕的一小部分成为列表并且可以滚动:这意味着我一次只能看到大约1个列表元素,并且只能滚动视图的这一部分(元素列表)。
行为2:
我还尝试过将List放在ScrollView
内,这转给了behavior_2,其中有两个不同的可滚动区域:第一个是带有文本(“ Text 1”等)的区域,而列表的容器/视图(意味着我无法滚动单个元素),第二个滚动区域是列表中的实际元素,但是一旦到达顶部元素,滚动部分就不会继续显示文本,例如:
import SwiftUI
struct Thing: Hashable {
var name: String
var number: Int
}
struct SummaryView: View {
var things = [Thing(name: "Paul", number: 42),Thing(name: "Jackie", number: 41),Thing(name: "James", number: 49),Thing(name: "Paola", number: 22)]
var body: some View {
ScrollView{
VStack(alignment: .leading){
Text("Text 1")
Text("Text 2")
Text("Text 3")
Text("Text 4")
List{
ForEach(self.things, id: \.self){ thing in
VStack(alignment: .leading){
Text(thing.name)
Text("\(thing.number) Years")
.foregroundColor(Color.blue)
}
.padding()
.frame(minWidth: 0, maxWidth: .infinity, alignment: Alignment.leading)
}
}.aspectRatio(contentMode: .fit)
Spacer()
NavigationLink(destination: Text("HI")){
Text("Finished")
}
}
}.edgesIgnoringSafeArea(.bottom)
}
}
我还试图将ScrollView与VStack切换为类似这样的内容:
VStack(alignment: .leading){
ScrollView {
.
.
.
}
}
那就像行为_2:
关于如何获得所需行为的任何建议(当您滚动经过“文本”时,您将在列表元素中滚动(这意味着您将看到的文本越少,滚动的内容越多),直到到达列表底部等)?
当然,没有我实现新的“列表”视图,然后使用for每个循环遍历元素
答案 0 :(得分:0)
如果将4个Text
放在List
内,它将随之滚动。 Spacer
也是不必要的:
var body: some View {
VStack(alignment: .leading) {
List {
VStack {
Text("Text 1")
Text("Text 2")
Text("Text 3")
Text("Text 4")
} .padding()
ForEach(self.things, id: \.self){ thing in
VStack(alignment: .leading){
Text(thing.name)
Text("\(thing.number) Years")
.foregroundColor(Color.blue)
} .padding()
}
}
NavigationLink(destination: Text("HI")){
Text("Finished")
}
}.edgesIgnoringSafeArea(.bottom)
}