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

SwiftUI中Sheet内ConfirmationDialog点击按钮后重复弹窗问题求助

Sheet内ConfirmationDialog点击按钮异常闪烁的解决办法

你遇到的问题是在Sheet中使用ConfirmationDialog时,点击对话框按钮会出现弹窗先关闭、短暂重新打开再关闭的异常闪烁现象。

问题原因

这是因为你把confirmationDialog修饰符附加在了List上,而List嵌套在NavigationStack内部。当对话框按钮被点击触发视图刷新时,绑定的dialogShow状态会出现异常的重复触发,导致弹窗反复显示关闭。

解决方法

将confirmationDialog修饰符移到Sheet的根视图(也就是外层的NavigationStack)上,让它脱离内部列表的刷新周期,避免状态被意外重置。

修改后的完整代码:

import SwiftUI

struct ContentView: View {
    
    @State private var sheetShow = false
    @State private var dialogShow = false
    
    var body: some View {
        NavigationStack {
            List {
                Button("Open sheet") {
                    sheetShow = true
                }
            }
            .navigationTitle("Test")
            .sheet(isPresented: $sheetShow) {
                NavigationStack {
                    List {
                        Button("Open dialog") {
                            dialogShow = true
                        }
                    }
                    .navigationTitle("Test")
                }
                // 将对话框修饰符移到sheet根视图外侧
                .confirmationDialog("Title", isPresented: $dialogShow) {
                    Button("Button 1") {
                        // 执行操作
                    }
                    Button("Button 2", role: .destructive) {
                        // 执行操作
                    }
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Sebastijan B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:07:37