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

ZStack中ProgressView与Circle点击行为差异问题

SwiftUI视图触摸事件差异原因解析

这是因为SwiftUI里不同类型的视图对触摸事件的处理逻辑不一样:

  • ProgressView 是系统提供的可交互类视图(哪怕它本身不响应点击操作),默认会拦截并消耗触摸事件。所以点击它时,事件不会传递到下层的绿色背景,背景的onTapGesture自然不会触发。
  • Circle 属于纯形状视图,默认没有交互能力,不会拦截触摸事件。点击它的时候,事件会直接穿透到下层的绿色背景,触发背景的点击手势。

扩展调整方案

如果想让Circle也拦截事件(不让背景点击触发),可以给它加一个空的点击手势:

Circle()
    .frame(width: 30, height: 30)
    .onTapGesture {} // 空手势拦截触摸事件

如果想让ProgressView不拦截事件,让背景点击触发,可以禁用它的触摸测试:

ProgressView()
    .allowsHitTesting(false) // 允许事件穿透到下层视图

内容的提问来源于stack exchange,提问作者Steven-Carrot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:27:26