我有以下看法:
var body: some View {
ScrollView {
VStack {
HStack {
Text("Something")
Text("Something")
}
GeometryReader { geo in
VStack {
CustomView(param: geo.size.width * 0.3) // I need these views to know the size so they can align internal components
CustomView(param: geo.size.width * 0.3)
CustomView(param: geo.size.width * 0.3)
}.frame(width: geo.size.width, height: geo.size.height) // Tried also without setting height here
}
Button(action: {
print("Hey")
}) {
Text("Push me")
}
}.padding()
}
}上述结果导致包含GeometryReader的部分与上面的视图重叠,最后的按钮位于GeometryReader的顶部。如果我将GeometryReader包装在另一个VStack中,结果也是相似的。
有办法纠正这种行为吗?我需要GeometryReader是因为代码注释中解释的原因(或者可能是等效的解决方案,因为我需要以一种特定的方式对元素的内部内容进行大小调整)。
发布于 2022-07-02 16:19:58
将GeometryReader移出ScrollView,就像
var body: some View {
GeometryReader { geo in // << here !!
ScrollView {
VStack {
HStack {
Text("Something")
Text("Something")
}
VStack {
CustomView(param: geo.size.width * 0.3)
CustomView(param: geo.size.width * 0.3)
CustomView(param: geo.size.width * 0.3)
}.frame(width: geo.size.width, height: geo.size.height)
Button(action: {
print("Hey")
}) {
Text("Push me")
}
}.padding()
}
}
}注: GeometryReader在ScrollView中不工作,因为ScrollView没有自己的几何学,它试图从内容中读取几何图形,所以是循环的。
https://stackoverflow.com/questions/72840559
复制相似问题