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

SwiftUI:移除视图层级后按钮仍可点击问题求助

iOS 16下使用.zIndex时视图移除后仍可点击的幽灵按钮问题

我在iOS 16中尝试根据状态显示/隐藏视图,发现视图从层级移除后仍会短暂保持可点击状态,出现幽灵按钮点击的问题。

  • 该问题仅在使用.zIndex修饰符时触发,而我需要这个修饰符来实现平滑过渡效果
  • 无论是否搭配transition修饰符,这个bug都会出现

复现步骤:点击“show”按钮,然后快速多次点击“hide”按钮。预期hide按钮的处理程序仅触发一次(因为视图已被移除),但实际会多次触发。

struct ContentView: View {
    @State var show = false

    var body: some View {
        ZStack {
            Button {
                print("show")
                show = true
            } label: {
                Text("show")
                    .foregroundColor(.white)
                    .padding()
                    .background(Color.blue.cornerRadius(8))
            }
            
            if show {
                Button {
                    // 快速点击时会多次触发
                    print("hide")
                    show = false
                } label: {
                    Text("hide")
                        .foregroundColor(.white)
                        .padding(64)
                        .background(Color.red.cornerRadius(8))
                }
                .zIndex(1) // 移除该修饰符则问题消失,但会失去视图过渡能力
            }
        }
    }
}

有没有人遇到过这个bug?除了移除.zIndex之外,有没有能保留过渡效果的修复方案?我已经提交了反馈FB11753719。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:00:24