我有一个VStack
,在.leading
内的ForEach
循环内,其对齐方式为ScrollView
,并且不考虑对齐参数。如果我在VStack
循环之外只有一个ForEach
,则使用了alignment参数,并且视图正确显示。
ScrollView{
// THIS DISPLAYS CORRECTLY
VStack(alignment: .leading){
Text("namename")
.font(.headline)
.lineLimit(1)
Text("namename name")
.font(.subheadline)
.lineLimit(1)
}
.padding()
.frame(minWidth: 0, maxWidth: .infinity)
.background(Color.gray.opacity(0.20))
.cornerRadius(5)
.padding(.bottom)
ForEach(self.list_of_names, id: \.self) { item in
// THIS DOES NOT DISPLAY CORRECTLY
VStack(alignment: .leading){
Text(item)
.font(.headline)
.lineLimit(1)
Text(item + " name")
.font(.subheadline)
.lineLimit(1)
}
.frame(minWidth: 0, maxWidth: .infinity)
.background(Color.gray.opacity(0.20))
.cornerRadius(5)
.padding(.bottom)
}
}
.padding()
第一行具有正确的对齐方式,并且位于ForEach
循环之外,而其他行则位于循环内部。蓝线代表我突出显示VStack
循环中的每个ForEach
答案 0 :(得分:1)
在ForEach循环中创建的VStack似乎确实符合alignment参数。将文本与前端对齐仅适用于VStack中较短的项目。
在顶部VStack中,顶部的“名称名”仅位于左侧,因为下方的“名称名”距ScrollView的中心宽得多。因此,顶级VStack并不是完全实现所需的ScrollView对齐的正确方法。
您要查找的内容:
为VStack保留对齐参数。
将对齐参数添加到VStack的框架中。
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)