【问题标题】:SwiftUI: Disable ScrollView scrolling to top if top of screen is touchedSwiftUI:如果触摸屏幕顶部,则禁用 ScrollView 滚动到顶部
【发布时间】:2022-11-27 07:50:10
【问题描述】:

我有一个 UI,它位于 VStack{} 中,带有自定义顶部栏和 ScrollView。我的顶部栏上有一些按钮,可以执行诸如打开用户帐户详细信息之类的操作。我发现如果我按下其中一些按钮,ScrollView 会自动滚动到屏幕顶部。有办法阻止吗?

我的代码:

struct MyView: View {
    var body: some View {
        VStack(spacing:0) {
            TopBarView()
            ScrollView(.vertical) {
                ForEach(0..<100, id: \.self) { index in
                    Text(String(index))
                }
            }
        }
    }
    
    struct TopBarView: View {
        var body: some View {
            Text("This is a top bar")
        }
    }
}

如果我触摸scrollView 框架上方的屏幕顶部,scrollView 会一直滚动到顶部。有没有办法禁用该行为?

【问题讨论】:

  • 我认为我无法仅使用这两行代码来理解您的代码是如何工作的。
  • 我再补充一些。 1秒

标签: swift swiftui


【解决方案1】:

这不是 SwiftUIXcodeScrollView 问题。

这是 iPhone 的内置功能。

当您点击屏幕的顶部中心边缘时,显示的内容将向上滚动。

尝试打开 Facebook、WhatsApp 等应用程序,然后滚动并点击同一位置,您会看到显示的内容向上滚动。

【讨论】:

  • 那么绝对没有办法禁用它吗?
  • .ignoresSafeArea() 呢?
  • @Randy 这可能是关于 iPhone 的可访问性而不是你的编程代码,所以我认为你不能禁用它。另外 .ignoreSafeArea() 将无法工作。
  • 谢谢你。我想我必须将一些菜单按钮移到离顶部远一点的位置,以防止用户同时单击它们和顶部。
【解决方案2】:

对于 UIScrollView,有一个 scrollsToTop 属性可以禁用:

let scrollview = UIScrollView()
scrollview.scrollsToTop = false

据我所知,SwiftUI 的ScrollView 什么都没有。您可以使用 UIViewRepresentable 为 SwiftUI 包装 UIScrollView

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2012-02-15
    相关资源
    最近更新 更多