当我使用按钮显示工作表时,工作表被拉下后,再次自动显示
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()
,第二个似乎是一个简单解决方法的模拟器错误。
isPresenting
将 binding 作为参数,告诉您工作表将对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")
【讨论】:
以上是关于当我使用按钮显示工作表时,工作表被拉下后,再次自动显示的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试打开谷歌工作表时,它向我显示一个错误......像 StopIteration 和 gspread.exceptions.Spreadsheet NotFound 这样的错误