当我使用按钮显示工作表时,工作表被拉下后,再次自动显示

Posted

技术标签:

【中文标题】当我使用按钮显示工作表时,工作表被拉下后,再次自动显示【英文标题】:When I use button to show sheet, after the sheet is pulled down, it is automatically displayed again 【发布时间】:2019-09-03 23:44:39 【问题描述】:

添加参数 ondismiss

.navigationBarItems(trailing: Button(action: self.showEditorInfo.toggle()) 
        Image(systemName: "paperplane")
    .sheet(isPresented: $showEditorInfo, onDismiss: self.showEditorInfo.toggle()) 
        Text("123")
    )

【问题讨论】:

副手,你的 sheet 修饰符看起来......我错了。您使用的是哪个版本的Xcode?另外,你为什么要在onDismiss 中切换showEditorInfo?我认为后者是事情发生的原因(为了测试事情,尝试两件事,将其完全取出,而不是toggle() 明确将其设置为`false)。但首先,请确保您拥有最新的 Xcode 测试版。 【参考方案1】:

当工作表被拉下时,您的视图会重新绘制,并且由于 showEditorInfo 为真,工作表会再次呈现。确保您重置 onDismiss 中的值:

.sheet(isPresented: $showEditorInfo,
       onDismiss:  self.showEditorInfo = false ) 
           Text("123")
    

您可能希望将 showEditorInfo 作为绑定传递到下一个视图,以便您可以通过编程方式将其关闭。这就是为什么在 onDismiss 中将值设置为 false 而不是切换它很重要的原因。

【讨论】:

【参考方案2】:

这里有两个不相关的问题:第一个是您的 onDismiss 处理程序中的 toggle(),第二个似乎是一个简单解决方法的模拟器错误。

    isPresentingbinding 作为参数,告诉您工作表将对showEditorInfo 值的变化做出反应,但 它将修改该值以反映 UI 的状态。当您在工作表上向下拖动以将其关闭时,showEditorInfo 会自动设置为 false。在您的代码中,您将其切换回 true。

    解决 #1 后,您的问题在设备上得到解决,但在模拟器中仍然出现。原因似乎是您的工作表附加到您的navigationBarItems 中的Button。如果您将工作表放在NavigationView 本身上,或者几乎除了Button 之外的任何地方,它在模拟器中的行为与预期一样。

struct ContentView: View 
    @State var showEditorInfo = false

    var body: some View 
        NavigationView 
            Text("ContentView")
                .navigationBarItems(trailing:
                    Button(action: 
                        self.showEditorInfo.toggle()
                    ) 
                        Image(systemName: "square.and.pencil")
                )
        
        .sheet(isPresented: $showEditorInfo) 
            Text("Sheet")
        
    

【讨论】:

以上是关于当我使用按钮显示工作表时,工作表被拉下后,再次自动显示的主要内容,如果未能解决你的问题,请参考以下文章

Django 中的模型表被删除

再次播放按钮工作错误

SwiftUI:关闭第一个工作表时如何显示第二个工作表

当我尝试打开谷歌工作表时,它向我显示一个错误......像 StopIteration 和 gspread.exceptions.Spreadsheet NotFound 这样的错误

呈现工作表时 EnvironmentObject 不起作用

再次显示视图控制器时自动布局中断