尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
IOS SwiftUI中ScrollView嵌套引起的滑动距离监听实效解决方案
文章目录一、前言二、核心代码一、前言在IOS中使用SwiftUI进行ScrollView滑动嵌套处理的时候想要监听某个滑动组件的滑动距离时候会出现外部滑动控件监听失效(或者距离不是真实的)的问题这里将解决方式记录如下。相关效果如下二、核心代码NestedScrollViews,swift//// NestedScrollViewOffsetTracker.swift// 解决SwiftUI中嵌套ScrollView无法监听滚动距离的问题//// 功能说明// 1. 可靠监听嵌套ScrollView的滚动距离// 2. 处理内外层ScrollView的手势冲突// 3. 提供清晰的滚动距离数值//importSwiftUI// 滚动偏移管理器classScrollOffsetManager:ObservableObject{PublishedvarouterOffset:CGFloat0PublishedvarinnerOffset:CGFloat0}// 外层滚动视图structOuterScrollView:View{ObservedObjectvarmanager:ScrollOffsetManagerStateprivatevaranchorFrame:CGRect.zerovarbody:someView{ScrollView{VStack(spacing:20){// 用于追踪的锚点视图Color.clear.frame(height:1).background(// GeometryReader { proxy in// Color.clear// .onAppear {// anchorFrame proxy.frame(in: .global)// }// .onChange(of: proxy.frame(in: .global)) { newFrame in// // 计算滚动偏移初始位置 - 当前位置// manager.outerOffset anchorFrame.minY - newFrame.minY// }// }GeometryReader{proxyin// 优化逻辑防止过早获取滚动位置Color.clear.onAppear{// 延迟设置锚点框架确保视图已经稳定DispatchQueue.main.asyncAfter(deadline:.now()0.1){anchorFrameproxy.frame(in:.global)// 确保初始偏移量为0manager.outerOffset0debugPrint(YM----初始锚点位置:\(anchorFrame.minY))}}.onChange(of:proxy.frame(in:.global)){newFramein// 只有当锚点框架已经设置后才更新偏移量if!anchorFrame.isEmpty{// 计算滚动偏移初始位置 - 当前位置manager.outerOffsetanchorFrame.minY-newFrame.minYdebugPrint(YM----列表滚动位置:\(manager.outerOffset))}}})Text(外层滚动距离:\(manager.outerOffset,specifier:%.2f)).font(.title).padding().background(Color.yellow).cornerRadius(8)// 内层滚动视图InnerScrollView(manager:manager).frame(height:400).background(Color.gray.opacity(0.1)).cornerRadius(12)ForEach(1..20){iinText(外层内容\(i)).frame(maxWidth:.infinity).padding().background(Color.green).foregroundColor(.white).cornerRadius(8)}}.padding()}.onAppear{// 重置滚动偏移manager.outerOffset0// 如果有groupId则滚动到对应位置// if let groupId groupId {// DispatchQueue.main.asyncAfter(deadline: .now() 0.2) {// withAnimation {// proxy.scrollTo(groupId, anchor: .center)// }//}//}}}}// 内层滚动视图structInnerScrollView:View{ObservedObjectvarmanager:ScrollOffsetManagerStateprivatevaranchorFrame:CGRect.zerovarbody:someView{ScrollView{VStack(spacing:15){// 用于追踪的锚点视图Color.clear.frame(height:1).background(GeometryReader{proxyinColor.clear.onAppear{anchorFrameproxy.frame(in:.global)}.onChange(of:proxy.frame(in:.global)){newFramein// 计算滚动偏移初始位置 - 当前位置manager.innerOffsetanchorFrame.minY-newFrame.minY}})Text(内层滚动距离:\(manager.innerOffset,specifier:%.2f)).font(.title).padding().background(Color.cyan).cornerRadius(8)ForEach(1..30){iinText(内层内容\(i)).frame(maxWidth:.infinity).padding().background(Color.blue).foregroundColor(.white).cornerRadius(8)}}.padding()}// 确保内层手势优先.highPriorityGesture(DragGesture())}}// 主视图structNestedScrollViews:View{StateObjectprivatevarscrollManagerScrollOffsetManager()varbody:someView{OuterScrollView(manager:scrollManager)}}structNestedScrollViews_Previews:PreviewProvider{staticvarpreviews:someView{NestedScrollViews()}}
RELATED

相关推荐

构建高保真模拟环境:平台策略无风险验证与智能决策

构建高保真模拟环境:平台策略无风险验证与智能决策

1. 项目概述:为什么我们需要一个“模拟战场”?在电商、本地生活、内容创作等几乎所有线上平台,商家或创作者(以下统称“商家”)的成长与竞争,早已不是简单的“上架商品、等待订单”模式。平台方作为规则的制…

📅 2026/11/13 7:55:22
【Docker 镜像仓库】

【Docker 镜像仓库】

Docker 镜像仓库管理指南核心概念镜像仓库是存放Docker镜像的服务器,类似手机应用商店,核心作用是解决镜像的共享与版本管理问题。分为两种类型:公共仓库:如Docker Hub,存放公开镜像私有仓库:企业自建&…

📅 2026/11/13 7:55:22
GPT-4o图像理解实战与DALL·E 3提示词工程指南

GPT-4o图像理解实战与DALL·E 3提示词工程指南

简介:多模态大模型正深刻改变AI内容生成范式,其中GPT-4o作为OpenAI当前唯一正式发布的多模态推理模型,核心能力聚焦于图像语义理解、跨模态推理与结构化分析;而DALLE 3则承担原生图像生成任务,依赖高质量提示词&#x…

📅 2026/9/18 4:22:31
MORE NEWS

更多资讯

📰

我是特种兵小时工订婚有效期多久

特种兵小时工订婚证书有效期及通过率揭秘 之前考的证在外省能不能转过来?这个问题,我敢说90%的人都没搞明白。特别是在新乡的应届工程类毕业生中,很多人都会遇到证书转移、复审、考试内容不清楚等情况,导致工作机会受限,甚至影响职业发展。今天咱们就…

📰

�涿州考个电工证怕考不过白交培训费?怎么报名一次过?

�涿州考个电工证怕考不过白交培训费?怎么报名一次过? 怕考不过白交培训费?你不是一个人,特别是对【涿州考个电工证】这件事,很多学员都担心花了几千块报名费,最后考试不过还得重新来。别急,这篇文章告诉你 怎么报名…

📰

河北省特种工申请保姆级教程:不知道去哪报名怕被中介坑

河北省特种工申请保姆级教程:不知道去哪报名怕被中介坑 你是不是也遇到过这种情况?想办特种作业证,到处打听报名点,结果被各种中介忽悠,花了冤枉钱还办不到证?别急,这篇保姆级教程就带你从头到尾搞定 河北省特种工申请 ,省心省力,还能避坑!…

📰

电工证蓝本的怎么查询?多久拿证才靠谱?住建工程从业者必须知道的真相

电工证蓝本的怎么查询?多久拿证才靠谱?住建工程从业者必须知道的真相 你是不是正在找电工相关的工作,但因为没有电工证而被拒绝?或者你已经拿到证,却不知道怎么查询证书信息?更头疼的是, 多久拿证…

📰

去河北石家庄考电工证怎么准备?考前押题帮你少走弯路

去河北石家庄考电工证怎么准备?考前押题帮你少走弯路 实操考试心里没底怕挂科,你不是一个人。很多打算去河北石家庄考电工证的学员,最怕的就是实操环节出错,不仅浪费时间和金钱,还会影响自己的职业发展。别慌,考前押题帮你把关,下面教你一套科学的备考…

📰

高压电工证多少道题目多久拿证 外省证书能不能转过来全知道

高压电工证多少道题目多久拿证 外省证书能不能转过来全知道 之前考的证在外省能不能转过来?这个问题是很多在外地工作的电工朋友最关心的事,尤其是像你这样刚毕业的新乡工程类学生,可能已经拿到别的地方的证书,但又想回到本地发展,或者正在考虑考证,都…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬