【问题标题】:ScrollViewReader's proxy.scrollTo not scrollingScrollViewReader 的 proxy.scrollTo 不滚动
【发布时间】:2021-06-14 10:49:22
【问题描述】:

我有这个 SwiftUI 代码,它构建了一个太大而无法在屏幕上显示的大型 UI 视图,所以我将它放在 2D 滚动视图中。虽然此示例是一个网格,但我们假设内容填充得一样多,但项目的放置更加随机。当视图出现时,我希望它首先将这些项目之一居中,在 ID 为“(25,25)”的项目下方的情况下。这编译得很好,文档看起来很好,并且可以运行,但不会滚动到 ID 为“(25,25)”的 ZStack。为什么它不滚动到这个 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)")
            }
        }
    }
}

【问题讨论】:

  • 我认为它正在滚动,但 offset 值很难看到,如果你删除 offset(x: y:),你可以看到滚动正在工作
  • 我使用偏移量将形状放置在视图中,因此我需要它滚动到偏移量的位置。或者有一个替代偏移来放置它

标签: swift swiftui ios14 scrollviewreader


【解决方案1】:

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


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

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

切换offsetid,它应该可以工作(但它不起作用,这让我觉得这里的某个地方存在 SwiftUI 错误)。

【讨论】:

  • 感谢指出id前的偏移量,我会更新上面的代码。但是,即使进行了该修复,它仍然无法滚动。我用填充替换了偏移量,但它仍然没有滚动。如果它适合你,你能告诉我怎么做吗?我很高兴听到你认为它应该有效,我会提交雷达文件
  • @niklassaers 除了 id 和 offset 的顺序之外,我没有更改任何代码,然后用填充替换了 offset。这使它对我有用。如果您无法重现,那么我将在周一访问我的 mac 时再次检查。
猜你喜欢
  • 2021-03-06
  • 1970-01-01
  • 2021-09-06
  • 2022-10-17
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多