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我错过了一些简单的间隔棒,但如果没有这一级别的解决方案,它似乎是不可能的。