gpt4 book ai didi

ios - SwiftUI ScrollView 不会将内容与 GeometryReader 居中

转载 作者:行者123 更新时间:2023-12-05 01:35:19 25 4
gpt4 key购买 nike

我在 SwiftUI 中有一个水平 ScrollView ,我想将其“动态”居中。 ScrollView 中的内容将是一个动态图表,用户可以通过改变年份来改变它的宽度(5、10、15 年图表水平增长)。

无论如何,我有两个问题:

  1. 我在水平 ScrollView 中的内容似乎是左对齐的,任何使用填充将其居中的尝试只会使其偏离居中,并且难以考虑各种屏幕尺寸。

  2. 当我尝试使用 GeometryReader 时,图表底部的“图例”被推到页面底部,Spacer() 无法修复它。

struct ChartView: View {   
var body: some View {
VStack(alignment: .center) {
GeometryReader { geo in
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(0..<self.chartSettings.getChartYears(), id:\.self) { index in
ColumnView()
}
}
}
.background(Color.gray)
.frame(maxHeight: geo.size.height/2)
}


//Chart Legend
HStack{
Rectangle()
.frame(width: 10, height: 10)
.foregroundColor(Color.init(#colorLiteral(red: 0.4666666687, green: 0.7647058964, blue: 0.2666666806, alpha: 1)))
Text("First Value")
.font(.system(size: 12))

Rectangle()
.frame(width: 10, height: 10)
.foregroundColor(Color.init(#colorLiteral(red: 0.2263821661, green: 0.4659538441, blue: 0.08977641062, alpha: 1)))
Text("Second Value")
.font(.system(size: 12))
}
}
}
}

是当前代码的样子, 是我希望的样子,无论屏幕尺寸/iPhone 型号如何。

enter image description here

注意这就是我使用 ScrollView 的原因:

<iframe src='https://gfycat.com/ifr/DeficientNiceInchworm' frameborder='0' scrolling='no' allowfullscreen width='400' height='210'></iframe>

最佳答案

GeometryReader 移到 VStack 之外:

struct ChartView: View {
var body: some View {
GeometryReader { geo in
VStack(alignment: .center) {
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(0..<self.chartSettings.getChartYears(), id:\.self) { index in
ColumnView()
}
}
}
.background(Color.gray)
.frame(maxHeight: geo.size.height/2)

//Chart Legend
HStack{
Rectangle()
.frame(width: 10, height: 10)
.foregroundColor(Color.init(#colorLiteral(red: 0.4666666687, green: 0.7647058964, blue: 0.2666666806, alpha: 1)))
Text("First Value")
.font(.system(size: 12))

Rectangle()
.frame(width: 10, height: 10)
.foregroundColor(Color.init(#colorLiteral(red: 0.2263821661, green: 0.4659538441, blue: 0.08977641062, alpha: 1)))
Text("Second Value")
.font(.system(size: 12))
}
}
}
}
}

注意:水平 ScrollView 内容总是从左边开始(不是对齐方式)。如果你只想在屏幕上居中 HStack - 删除 ScrollView

关于ios - SwiftUI ScrollView 不会将内容与 GeometryReader 居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63035997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com