gpt4 book ai didi

swiftui - 为什么 VStack 在带有 ScrollView 的 GeometryReader 中不起作用?

转载 作者:行者123 更新时间:2023-12-04 10:18:36 29 4
gpt4 key购买 nike

我使用 vStack 的 ScrollView 在没有 GeometryReader 的情况下工作(在 AppleTV 中 - 我没有在 iOS 中测试)。

然后我添加了 geometryreader 和 VStack 像 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")
}
)
}
}
}
}
}

结果:

enter image description here

并且此代码按需要工作:
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")
}
// )
// }
}
}
}
}

结果:
enter image description here

最佳答案

让我假设最初您想要这个(并且它不会破坏 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
}
)
}
}

关于swiftui - 为什么 VStack 在带有 ScrollView 的 GeometryReader 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60965295/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com