You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取分页ScrollView中当前显示视图的索引?

如何获取SwiftUI分页ScrollView的当前显示页面

可以通过SwiftUI的scrollPosition绑定来实时追踪当前显示的分页视图,这个方案能解决onAppear仅触发一次的问题,页面回退时也会同步更新当前页码。

以下是修改后的完整代码,可直接复制到Xcode运行:

import SwiftUI

struct PagingScrollView<Content: View>: View {
    var pageCount: Int
    var viewForPage: (Int) -> Content
    @Binding var currentPage: Int // 添加绑定属性追踪当前页码

    var body: some View {
        GeometryReader { geo in
            ScrollView (.horizontal) {
                HStack (spacing: 0) {
                    ForEach(0..<pageCount, id:\.self) { index in
                        viewForPage(index)
                            .frame(width: geo.size.width, height: geo.size.height)
                    }
                }
                .scrollTargetLayout()
            }
            .scrollTargetBehavior(.paging)
            .scrollPosition(id: $currentPage) // 绑定滚动位置到当前页码
        }
    }
}

struct PreviewView: View {
    @State private var currentPage = 0 // 存储当前页码的状态变量

    var body: some View {
        VStack {
            Text("当前显示页面:\(currentPage)")
                .font(.title)
                .padding()
            PagingScrollView(
                pageCount: 10,
                viewForPage: getView(index:),
                currentPage: $currentPage // 传递绑定
            )
        }
    }

    func getView(index: Int) -> some View {
        Text("View: \(index)")
            .font(.largeTitle)
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .background(index % 2 == 0 ? Color.blue.opacity(0.2) : Color.green.opacity(0.2))
    }
}

#Preview {
    PreviewView()
}

关键说明

  • @Binding var currentPage: Int:让父视图可以和分页ScrollView共享当前页码状态
  • .scrollPosition(id: $currentPage):该修饰符会自动识别当前处于视口内的滚动目标ID(这里就是页面索引),在分页切换时实时更新绑定的变量
  • 配合.scrollTargetBehavior(.paging)和等宽的子视图,scrollPosition会精准对应当前完全显示的页面

内容的提问来源于stack exchange,提问作者the Reverend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:31:20