【问题标题】:SwiftUI: reset state for .sheet(_: onDismiss:)SwiftUI:为 .sheet(_: onDismiss:) 重置状态
【发布时间】:2024-01-21 13:34:01
【问题描述】:

我在一个视图上实现了一个onTapGesture,它使用.sheet 呈现另一个视图。

当用户使用向下滑动手势关闭工作表时,我将 @State 更改回 false。 (与.sheet(_: onDismiss:)

当我第一次点击卡片时,会显示该表格。

但是,在关闭 .sheet 并再次点击 Card() 后,不会显示该工作表。

我不确定它为什么不起作用:我添加了 2 个打印语句来检查 @State 的值,当我关闭 .sheet 时它被设置回 false

struct CardView: View {

    @EnvironmentObject var bixiModel: BixiStationCombinedListViewModel

    @State var isModalOpen: Bool = false

    var station: BixiStationCombinedViewModel

    var body: some View {

        ZStack(alignment: .leading){

            Card(station: station)

        }

        .onTapGesture {
            self.isModalOpen = true
            print(self.isModalOpen)

// Prints: true

        }
        .sheet(isPresented: self.$isModalOpen, onDismiss: {
            self.isModalOpen = false
            print(self.isModalOpen)

// Prints: false

            })
            {
                BixiStationDetailView(station: self.station)
                    .environmentObject(self.bixiModel)
        }
    }
}

知道为什么我的实现不起作用吗?

谢谢!

【问题讨论】:

    标签: swift state swiftui


    【解决方案1】:

    请注意:iOS 13.1 Beta 1、Xcode 11 Beta 7 已修复!

    【讨论】:

      【解决方案2】:

      这可能是因为您在List 中有.sheet。如果是这样,那么这是一个已知的错误,有望得到修复。在此期间,您必须将.sheet 移出List,它应该可以按预期工作。

      【讨论】:

      • 感谢您告诉我!