行为#1: 我试图在拥有元素列表之前拥有文本,并使所有内容都连贯地滚动。我尝试在许多方面更改代码并最终得到不同的错误行为。这是行为_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 放在 aScrollView
中,这导致 behavior_2 有两个不同的可滚动区域:第一个是带有文本的区域(“Text 1”等......)和容器/view 列表(意味着我不能滚动单个元素),第二个滚动区域是列表中的实际元素,但是一旦我到达顶部元素,滚动部分就不会继续到文本等:
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 {
.
.
.
}
}
这表现得像behavior_2:
关于如何获得所需行为的任何建议(当您滚动文本时,然后滚动列表元素(这意味着您滚动的次数越多,您看到的文本越少),直到到达列表底部等)?
当然,不用我实现一个新的“列表”视图,然后使用 for each 循环遍历元素