SwiftUI:为 .sheet(_: onDismiss:) 重置状态

Posted

技术标签:

【中文标题】SwiftUI:为 .sheet(_: onDismiss:) 重置状态【英文标题】:SwiftUI: reset state for .sheet(_: onDismiss:) 【发布时间】:2019-08-21 19:59:21 【问题描述】:

我在一个视图上实现了一个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)
        
    

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

谢谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

感谢您告诉我!

以上是关于SwiftUI:为 .sheet(_: onDismiss:) 重置状态的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI .sheet() 的主体在解雇后被评估并且不呈现

SwiftUI禁止用户关闭sheet弹出视图在iOS14.6+失效的巧妙解决

SwiftUI禁止用户关闭sheet弹出视图在iOS14.6+失效的巧妙解决

SwiftUI:.sheet() 在关闭当前工作表时不会使用预期数据转到上一个视图

iOS 16 中 SwiftUI 防止弹出的 sheet 视图被下滑关闭(dismiss)的新解决方案

iOS 16 中 SwiftUI 防止弹出的 sheet 视图被下滑关闭(dismiss)的新解决方案