ScrollViewReader's proxy.scrollTo not scrolling



我有一个SwiftUI代码,它构建了一个大的UI视图,太大了,无法放在屏幕上,所以我把它放在了2D滚动视图中。虽然这个例子是一个网格,但让我们假设内容填充得同样多,但项目的放置更随机。当视图出现时,我希望它从这些项目中的一个居中开始,在ID为"的项目下面的情况下;(25,25(";。这编译得很好,文档看起来也很好,并且运行,但不会滚动到ID为"的ZStack;(25,25(";。为什么不滚动到此ZStack?该代码已在iOS 14和iOS 15b1上进行了测试。

var body: some View {
ScrollViewReader { scrollView in
ScrollView([.horizontal, .vertical]) {
VStack(alignment: .leading, spacing: 0) {
ForEach(0..<50) { y in
HStack(alignment: .center, spacing: 0) {
ForEach(0..<50) { x in
ZStack {
Circle()
.frame(width: 35, height: 35)
.foregroundColor(.blue.opacity(0.5))
Text("((x),(y)")
.font(.system(size: 8))
}
.offset(x: CGFloat(x * 25), y: CGFloat(y * 25))
.id("((x),(y))")
}
}
}
}

}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
scrollView.scrollTo("(25,25)")
}
}
}
}

我认为您将偏移误认为是填充,只需填充即可。


看起来不滚动到带偏移的视图是一个错误。

理论上,您的代码有一个错误:您在偏移之前向视图添加了一个ID,因此当您滚动到该ID时,它会滚动到偏移之前视图所在的位置。

切换offsetid,它应该可以工作(尽管它没有工作,这让我认为这里有一个SwiftUI错误(。

最新更新