ios - 尝试展开/折叠工作表上的部分时,SwiftUI 应用程序崩溃
问题描述
这个想法是,当用户单击标题时,它们会展开以显示控件。
当我展开其中一个部分时,它会崩溃,然后单击 TextField,然后单击不同的部分以使当前部分折叠并展开另一个部分。
注意事项:
- 这只是“工作表”的问题。如果我通过 NavigationLink 呈现 DetailView,它会完美运行
- 仅当我单击 TextField 时才会发生这种情况。如果我只是展开/折叠部分 - 一切正常
- Xcode 11.6,在 iOS 13.6 上运行
我的代码有什么问题?或者它是 SwiftUI 中的一个错误?
我将有问题的代码提炼成最小的工作示例
struct DetailView: View {
@State var name: String = "Default name"
@State var location: String = "Default location"
@State var expanded : Int = -1
var body: some View {
VStack {
Button (action: {self.expanded = 0}) {
HStack {
Text(self.name).font(.caption)
Spacer()
Image (systemName: "chevron.right")
}
}
if self.expanded == 0 {
TextField ("Enter name", text: self.$name)
}
Button (action: {self.expanded = 1}) {
HStack {
Text(self.location).font(.caption)
Spacer()
Image (systemName: "chevron.right")
}
}
if self.expanded == 1 {
TextField ("Enter location", text: self.$location)
}
Spacer()
}.padding()
}
}
struct ContentView: View {
@State var showDetail = false
var body: some View {
NavigationView {
Button ("Detail") {
self.showDetail = true
}.sheet(isPresented: self.$showDetail, content: {DetailView()})
}
}
}
解决方案
万一有人从谷歌登陆这里,它最终会出现与此处相同的问题SwiftUI iOS 应用程序在状态更改导致键盘在工作表中辞去第一响应者时崩溃
然而,在我的情况下,堆栈是空的,只有在无数次尝试之后,我才得到一个ViewRendererHost.render
除了通用“主”事件循环之外的堆栈。果然谷歌搜索它立即产生了上面的链接
将此报告给苹果。这显然是 SwiftUI 中的一个错误
推荐阅读
- google-cloud-datalab - 通过 Google Cloud Shell 连接时无法在 datalab 中运行笔记本
- azure - 403 禁止 microsoft-azure-application-gateway/v2
- c++ - 我如何在没有定义的情况下在 C++ 中获取变量名
- python - 如果标识符在范围内,则选择训练数据
- vue.js - quasar q-table 数据分页限制如何延迟加载
- java - webdrivermanager 与 TravisCI 构建服务器的兼容性
- java - Java 构造函数可以提升类型吗?
- redis - Redis 配置设置会在几个小时后动态更改
- c# - 如何使用同时实现 IDisposable 和 IAsyncDisposable 的类型?
- delphi - Delphi 5 BPL 不只链接一个程序