【发布时间】:2021-01-31 04:28:42
【问题描述】:
我有一个垂直的ScrollView 和一个ForEach 循环,里面有HStack 和Text、Image 和两个Text。我想保持每一行的项目彼此对齐。我试图用alignment .leading 包裹VStack,但什么也没做。我遇到的问题是文本没有对齐。对 SwiftUI 来说仍然很新,因此我们将不胜感激。
ScrollView(.vertical) {
ForEach(self.daily.forecast, id: \.date) { forecast in
HStack (spacing : 10){
Text(forecast.date ?? "")
.fontWeight(.bold)
Spacer()
RequestImage(Url("IMAGE_URL"))
.aspectRatio(contentMode: .fit)
.frame(width: 30, height: 30)
.clipped()
Spacer()
Text("\(forecast.maxTemp)")
.fontWeight(.bold)
Text("\(forecast.minTemp)")
.fontWeight(.bold)
}
}
}
.padding(.all, 15)
.onAppear() {
authorize {_ in
loadForecast()
}
}
更新: 我能够离得更近一点,但事情仍然与我想要的位置不一致。
ScrollView(.vertical) {
ForEach(self.daily.forecast, id: \.date) { forecast in
HStack (spacing : 10){
Text(date)
.font(.title3)
.fontWeight(.bold)
.frame(minWidth: 45)
Spacer()
RequestImage(Url("IMAGE_URL"))
.aspectRatio(contentMode: .fit)
.frame(width: 35, height: 35)
.frame(minWidth: 50)
.clipped()
Spacer()
Text(maxTemp)
.font(.title3)
.fontWeight(.bold)
.frame(minWidth: 45)
Text(minTemp)
.font(.title3)
.fontWeight(.bold)
.foregroundColor(Color.secondary)
.frame(minWidth: 45)
}
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
}
}
.padding(.all, 15)
.onAppear() {
authorize {_ in
loadForecast()
}
}
【问题讨论】:
-
这是因为您的每个 Text() 的长度不同。我建议在每个文本的框架上设置宽度或 minWidth。
-
不清楚您希望它们如何对齐?你会添加一些演示/草图/模型吗?
-
@Asperi 我添加了我正在寻找的代码的演示。我离得很近,但看起来仍然很不对劲,而且对齐方式不对。
-
@nicksarno 确实有帮助,但没有解决我的问题
-
@Cole 为 HStack 中的每个项目添加一个带有颜色的 .background(),您将能够看到框架的不同大小。
标签: swiftui