Swift 在WatchOS中使用列表时,滚动行为不正确
行为#1: 我试图在我有一个元素列表之前有一个文本,让所有的东西都有连贯的滚动。我尝试过在许多方面修改代码,结果得到了不同的错误行为。 以下是行为1的代码:Swift 在WatchOS中使用列表时,滚动行为不正确,swift,xcode,swiftui,watchos,watchos-6,Swift,Xcode,Swiftui,Watchos,Watchos 6,行为#1: 我试图在我有一个元素列表之前有一个文本,让所有的东西都有连贯的滚动。我尝试过在许多方面修改代码,结果得到了不同的错误行为。 以下是行为1的代码: struct Thing: Hashable { var name: String var number: Int } struct SummaryView: View { var things = [Thing(name: "Paul", number: 42),Thing(name: "Jackie", numb
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)
}
}
这使得屏幕上有一小部分是列表,可以滚动:这意味着我一次只能看到一个列表元素,并且只能滚动视图的该部分(列表元素)
行为#2:
我还尝试将列表放在滚动视图中,这与行为2有关,其中有两个不同的可滚动区域:第一个是文本区域(“文本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)
}
}
我还尝试使用VStack切换ScrollView,以获得如下内容:
VStack(alignment: .leading){
ScrollView {
.
.
.
}
}
这就像行为2:
关于如何获得所需行为的任何建议(当您滚动浏览文本时,然后滚动列表元素(意味着滚动越多,看到的文本越少),直到您到达列表底部等)
当然,如果没有我实现一个新的“列表”视图,然后使用for-each循环来迭代元素如果您将4个文本
s放入列表
中,它将随之滚动。也不需要垫片
:
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)
}