SwiftUI 模式表在关闭后重新打开

Posted

技术标签:

【中文标题】SwiftUI 模式表在关闭后重新打开【英文标题】:SwiftUI Modal Sheet Re-Opening After Dismiss 【发布时间】:2019-10-11 13:58:42 【问题描述】:

我在导航视图中有一个列表,带有一个尾随导航按钮以添加列表项。该按钮打开一个模式表。当我关闭工作表(通过将其拉下)时,工作表会自动再次弹出,我无法返回第一个屏幕。这是我的代码。

struct ListView: View 

    @ObservedObject var listVM: ListViewModel

    @State var showNewItemView: Bool = false

    init() 
        self.listVM = ListViewModel()
    

    var body: some View 
        NavigationView 
            List 
                ForEach(listVM.items, id: \.dateCreated)  item in
                    HStack 
                        Text(item.name)
                        Spacer()
                        Image(systemName: "arrow.right")
                    
                
            
                .navigationBarTitle("List Name")
                .navigationBarItems(trailing: AddNewItemBtn(isOn: $showNewItemView))
        
    

struct AddNewItemBtn: View 

    @Binding var isOn: Bool

    var body: some View 
        Button(
            action:  self.isOn.toggle() ,
            label:  Image(systemName: "plus.app") )
            .sheet(
                isPresented: self.$isOn,
                content:  NewItemView() )
    

我收到此错误:

警告:尝试呈现 <_ttgc7swiftuip13> 已经呈现(空)

我尝试在按钮本身的“onDismiss”中切换布尔值,但这也不起作用。有什么想法吗?

【问题讨论】:

【参考方案1】:

原来将按钮放在 navigationBarItems(trailing:) 修饰符中是问题所在。我只是将按钮放在列表本身而不是导航栏中,它工作得很好。一定是某种错误。

【讨论】:

您使用的是什么版本的 Xcode?这应该工作 @Edward 非常感谢您帮助我弄清楚我使用的是旧版本。我有 11 个 GM。没有注意到11.2已经出来了。该死的测试版。 可以确认这是一个错误。我刚升级到Xcode 11.1,问题就解决了。

以上是关于SwiftUI 模式表在关闭后重新打开的主要内容,如果未能解决你的问题,请参考以下文章

按返回键“不”关闭软件键盘 - SwiftUI

SwiftUI 工作表在第一次呈现时被关闭

列表重新排序后 SwiftUI 关闭

显示 1 秒后自动关闭模式 - swiftui

SwiftUI:模式关闭后导航栏中的按钮不会触发

SwiftUI:从子视图中关闭模式