SwiftUI tabview(滚动)事件?

标签 swiftui scrollview tabview

是否可以将滚动更改事件附加到 SwiftUI 中的 TabView? 我想在用户触摸并拖动其中一个 View 时获取滚动位置,该位置的每次更改都会更新。

    TabView {

        Text("Example 1")
        Text("Example 2")
        Text("Example 3")

    }
    .tabViewStyle(PageTabViewStyle())

我尝试添加 DragGesture,但 TabView 不再工作(可能是因为 DragGesture 接管了输入)。我在Apple的文档中也没有看到任何相应的事件。

有谁知道实现这个的方法吗?

干杯..

最佳答案

我们可以用不同的方式跟踪它 - 通过改变 View 坐标(实际上它与拖动平移几乎相同)

这是一个用于一个选项卡的圆顶。使用 Xcode 13.4/iOS 15.5 进行测试

var body: some View {
    TabView {

        Text("Example 1")
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .background(GeometryReader {
                // read and store origin (min X) of page
                Color.clear.preference(key: ViewOffsetKey.self,
                    value: $0.frame(in: .global).minX)
            })

        Text("Example 2")
        Text("Example 3")

    }
    .tabViewStyle(PageTabViewStyle())
    .onPreferenceChange(ViewOffsetKey.self) {
        // process here update of page origin as needed
        print("Offset >> \($0)")
    }
}

demo

关于SwiftUI tabview(滚动)事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73362964/

相关文章:

java - 如何将一项 Activity 实现到另一项 Activity 中?

安卓标签 : Activities or Views?

swiftui - 我无法让 LazyVGrid 显示超过两行

swiftui - 如何修复已弃用的 'buttonstyle'

widget - 在 Flutter 中创建双向 PageView 滚动?

android - 在 android 中使用分页的 ScrollView

SwiftUI - 如何在点击时使组件在水平 ScrollView 中居中?

ios - 如何在 SwiftUI 和 iOS 14 中向领先的导航栏项添加角标(Badge)?

进入第三个 View ( Controller )后,SwiftUi导航栏按钮消失

cocoa - 如何在基于文档的应用程序中制作safari的tabView?