首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何通过SwiftUI中的.onTapGesture在两个不同的接口(没有Button\TextField)中使用两个列表中的ScrollViewReader?

在SwiftUI中,可以使用.onTapGesture函数来实现在两个不同的接口中使用两个列表中的ScrollViewReader。ScrollViewReader是一个用于在ScrollView中滚动到指定位置的视图容器。

首先,需要创建两个列表,并将它们包装在ScrollView中。然后,使用ScrollViewReader将其包裹在需要滚动的视图周围。接下来,使用.onTapGesture函数来捕捉点击手势,并在其中执行滚动操作。

以下是一个示例代码:

代码语言:txt
复制
import SwiftUI

struct ContentView: View {
    @State private var selectedTab: Int = 0
    @State private var scrollToIndex: Int? = nil
    
    var body: some View {
        VStack {
            TabView(selection: $selectedTab) {
                List {
                    ScrollViewReader { scrollViewProxy in
                        ForEach(0..<10) { index in
                            Text("Item \(index)")
                                .padding()
                                .id(index)
                        }
                        .onAppear {
                            if let scrollToIndex = scrollToIndex {
                                scrollViewProxy.scrollTo(scrollToIndex, anchor: .top)
                                self.scrollToIndex = nil
                            }
                        }
                    }
                }
                .tabItem {
                    Text("List 1")
                }
                .tag(0)
                
                List {
                    ScrollViewReader { scrollViewProxy in
                        ForEach(10..<20) { index in
                            Text("Item \(index)")
                                .padding()
                                .id(index)
                        }
                        .onAppear {
                            if let scrollToIndex = scrollToIndex {
                                scrollViewProxy.scrollTo(scrollToIndex, anchor: .top)
                                self.scrollToIndex = nil
                            }
                        }
                    }
                }
                .tabItem {
                    Text("List 2")
                }
                .tag(1)
            }
            
            Spacer()
            
            HStack {
                Button("Scroll to Item 5") {
                    selectedTab = 0
                    scrollToIndex = 5
                }
                .padding()
                
                Button("Scroll to Item 15") {
                    selectedTab = 1
                    scrollToIndex = 15
                }
                .padding()
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在这个示例中,我们创建了两个列表,分别包含10个项目。通过点击按钮,可以在两个列表之间切换,并滚动到指定的项目位置。通过使用ScrollViewReader和.onAppear函数,我们可以在视图出现时执行滚动操作。

请注意,这只是一个示例代码,你可以根据自己的需求进行修改和扩展。关于SwiftUI的更多信息,你可以参考腾讯云的官方文档:SwiftUI官方文档

希望这个答案能够帮助到你!如果你有任何其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

6分33秒

048.go的空接口

6分27秒

083.slices库删除元素Delete

2分59秒

Elastic 5分钟教程:使用机器学习,自动化异常检测

34秒

PS使用教程:如何在Photoshop中合并可见图层?

2分7秒

使用NineData管理和修改ClickHouse数据库

13分17秒

002-JDK动态代理-代理的特点

15分4秒

004-JDK动态代理-静态代理接口和目标类创建

9分38秒

006-JDK动态代理-静态优缺点

10分50秒

008-JDK动态代理-复习动态代理

15分57秒

010-JDK动态代理-回顾Method

13分13秒

012-JDK动态代理-反射包Proxy类

17分3秒

014-JDK动态代理-jdk动态代理执行流程

领券