为什么 VStack 不能在带有滚动视图的 GeometryReader 中工作?
why is VStack not working in GeometryReader with scrollview?
我的 vStack 滚动视图在没有 GeometryReader 的情况下工作(在 AppleTV 中 - 我没有在 iOS 中测试)。
然后我添加了 geometryreader 和 VStack "collapses" 就像 ZStack。
我该怎么做才能解决这个问题? (是的,我需要几何阅读器;))
struct ContentView: View {
@State var offset : CGFloat = 0
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading) {
GeometryReader { geometry -> AnyView in
let newOffset = geometry.frame(in: .global).minY
if newOffset != self.offset {
self.offset = newOffset
print("new offset",newOffset)
}
return AnyView (
ForEach (0..<5) { _ in
Text("umpf")
}
)
}
}
}
}
}
结果:
并且此代码按预期工作:
struct ContentView: View {
@State var offset : CGFloat = 0
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading) {
// GeometryReader { geometry -> AnyView in
// let newOffset = geometry.frame(in: .global).minY
// if newOffset != self.offset {
// self.offset = newOffset
// print("new offset",newOffset)
// }
// return AnyView (
ForEach (0..<5) { _ in
Text("umpf")
}
// )
// }
}
}
}
}
结果:
假设您最初想要这个(并且它不会破坏 ScrollView 布局和滚动)
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading) {
ForEach (0..<5) { _ in
Text("umpf")
}
}.background(
GeometryReader { geometry -> Color in
let newOffset = geometry.frame(in: .global).minY
if newOffset != self.offset {
self.offset = newOffset
print("new offset",newOffset)
}
return Color.clear
}
)
}
}
我的 vStack 滚动视图在没有 GeometryReader 的情况下工作(在 AppleTV 中 - 我没有在 iOS 中测试)。
然后我添加了 geometryreader 和 VStack "collapses" 就像 ZStack。
我该怎么做才能解决这个问题? (是的,我需要几何阅读器;))
struct ContentView: View {
@State var offset : CGFloat = 0
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading) {
GeometryReader { geometry -> AnyView in
let newOffset = geometry.frame(in: .global).minY
if newOffset != self.offset {
self.offset = newOffset
print("new offset",newOffset)
}
return AnyView (
ForEach (0..<5) { _ in
Text("umpf")
}
)
}
}
}
}
}
结果:
并且此代码按预期工作:
struct ContentView: View {
@State var offset : CGFloat = 0
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading) {
// GeometryReader { geometry -> AnyView in
// let newOffset = geometry.frame(in: .global).minY
// if newOffset != self.offset {
// self.offset = newOffset
// print("new offset",newOffset)
// }
// return AnyView (
ForEach (0..<5) { _ in
Text("umpf")
}
// )
// }
}
}
}
}
结果:
假设您最初想要这个(并且它不会破坏 ScrollView 布局和滚动)
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading) {
ForEach (0..<5) { _ in
Text("umpf")
}
}.background(
GeometryReader { geometry -> Color in
let newOffset = geometry.frame(in: .global).minY
if newOffset != self.offset {
self.offset = newOffset
print("new offset",newOffset)
}
return Color.clear
}
)
}
}