2
ScrollView {
    VStack() {
        ForEach(0 ..< 5) { item in
            Text("Hello There")
                .font(.largeTitle)
         }
    }
}

上面的代码结果如下:

在此处输入图像描述

当我们添加 aGeometryReader时,视图会失去它们的大小和间距(.position修饰符只是为了使 GeometryReader 中的文本视图居中):

ScrollView {
    VStack() {
        ForEach(0 ..< 5) { item in
            GeometryReader { geometry in
            Text("Hello There")
                .font(.largeTitle)
                .position(x: UIScreen.main.bounds.size.width/2)
            }
        }
    }
}

在此处输入图像描述

任何人都可以分享一些帮助/建议,为什么这是这种行为以及我可能想要研究的内容,以便在我在这里尝试做GeometryReader的 a 中使用居中对齐的视图?ScrollView

向 中添加.frame(minHeight: 40)修饰符ForEach是强制视图占用文本所需空间的一种方法,但这不是一个非常好的或可扩展的解决方案。

谢谢!

4

1 回答 1

1

如果您只需要屏幕宽度,请放置GeometryReader在滚动视图之外:

GeometryReader { geometry in     // << here !!
  ScrollView {
    VStack() {
        ForEach(0 ..< 5) { item in
            Text("Hello There")
                .font(.largeTitle)
                .position(x: UIScreen.main.bounds.size.width/2)
            }
        }
    }
}

任何人都可以分享一些关于为什么这是行为的帮助/建议

ScrollView没有自己的尺寸,因此GeometryReader无法从中读取任何内容,并为自己的孩子提供一些最小尺寸。

于 2020-12-02T16:47:30.583 回答