Swiftui ScrollView内容的动态高度不工作

Swiftui ScrollView内容的动态高度不工作,swiftui,Swiftui,我的滚动视图中的内容有时比屏幕短,有时比屏幕长。如果内容太短,我会尝试将其拉伸到底部,但无论我做什么,内容都会保持较短: 这是代码的样子: struct ContentView: View { var body: some View { ScrollView { VStack { Text("Header") .padding()

我的
滚动视图中的内容有时比屏幕短,有时比屏幕长。如果内容太短,我会尝试将其拉伸到底部,但无论我做什么,内容都会保持较短:

这是代码的样子:

struct ContentView: View {
    var body: some View {
        ScrollView {
            VStack {
                Text("Header")
                    .padding()
                VStack {
                    Text("Content")
                    Image(systemName: "bell")
                    Spacer()
                }
                .padding()
                .frame(maxWidth: .infinity, maxHeight: .infinity)
                .background(Color(.systemBackground))
            }
        }
        .background(Color.yellow.ignoresSafeArea())
    }
}

我本以为
VStack
中的
Spacer()
会将其拉伸到底。也可以使用
maxHeight:.infinity
来帮助我,但即使
ScrollView
是屏幕高度,内容也始终保持较短(因为其上有黄色背景)。在iPad上,当一个屏幕显示出巨大的间隙时,这就成了一个更大的问题。如何解决不同屏幕高度的问题?

使用@CenkBilgen的叠加思想+
GeometryReader
,您可以执行以下操作:

struct ContentView: View {
    var body: some View {
        Color.clear
            .overlay(GeometryReader { geo in
                ScrollView {
                    VStack {
                        ForEach(1..<10) {
                            Text("\($0)").padding()
                        }
                    }
                    HStack { Spacer() }
                }
                .clipped()
                .frame(width: geo.size.width, height: geo.size.height)
            })
    }
}
struct ContentView:View{
var body:一些观点{
颜色。清晰
.overlay(GeometryReader{geo in
滚动视图{
VStack{

ForEach(1..scrollview内容高度不能设置为无限高,我相信这就是为什么VStack中的间隔没有可见效果。如果您希望屏幕底部的所有内容都是白色的,请尝试为scrollview本身(而不是内容)设置显式高度,或者将其设置为背景色的覆盖(只是一些需要尝试的东西)。这回答了你的问题吗?SwiftUI的一般规则在ScrollView中是不一样的。我不确定苹果是否想要如此尊重!但是因为你的信息空间不能在ScrollView中使用,或者颜色不能填充!我们必须给它们加高,如果你还记得的话,我建议开发你自己的自定义ScrollView来节省时间查找apple scrollview的错误。创建自定义scrollview将花费更少的时间来尝试修复scrollview的问题。@Asperi我确实研究了这个答案,并尝试了它,确实让我更接近了。仍然有一个差距,因此似乎需要调整安全区的数字,但更重要的是,在解决问题之前,视图重新渲染了9次,所以我很高兴ing我错过了一些简单的间隔棒,但如果没有这一级别的解决方案,它似乎是不可能的。