首页
学习
活动
专区
工具
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官方文档

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

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

相关·内容

领券