在某些条件下展示工作表时,我遇到了一个奇怪的崩溃。我已经能够在一个初始项目中重现它,并且已经得到多个人的确认,它最终也会崩溃。奇怪的是,对于某些模拟器/用户,这些步骤不会使应用程序崩溃。
我已经向 Apple (FB9064549) 提交了错误报告,但我想我也会在这里问。
重现崩溃的步骤如下:
- 单击“打开详细视图”按钮
- 回去
- 再次单击“打开详细视图”按钮
- 单击“当前模式”
- 它会崩溃
基本内容视图有一个带有菜单(或只是普通文本)的工具栏和一个用于推送到新页面的 NavigationLink。如果我注释掉 .toolbar,则不会发生崩溃。
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
NavigationLink(
destination: DetailView(),
label: {
Text("Open Detail View")
})
}
// If you comment this out, it does not crash
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Menu {
ForEach(1...5, id: \.self) { index in
Button {
print("tap menu item")
} label: {
HStack {
Text("Menu Item \(index)")
}
}
}
} label: {
Text("Filter")
}
}
}
}
}
}
呈现的 DetailView 可以通过绑定项呈现 .sheet。如果我改用 FullScreenCover,它不会崩溃。
struct DetailView: View {
@State var modalType: ModalType?
var body: some View {
Button(action: {
modalType = .modalWithTabView
}, label: {
Text("Present Modal")
})
.sheet(item: $modalType, content: { $0 })
}
}
enum ModalType: Identifiable, View {
case modalWithTabView
var id: String {
return "modalWithTabView"
}
var body: some View {
switch self {
case .modalWithTabView:
ModalWithTabView()
}
}
}
呈现的工作表是一个基本的 TabView 分页。如果我不添加 PageTabViewStyle 样式,它不会崩溃。
struct ModalWithTabView: View {
@State var currentStep = 0
var body: some View {
TabView(selection: $currentStep) {
ForEach (0 ..< 10) { index in
Text("Page \(index)")
.tag(index)
}
}
// If you comment this out, it does not crash
.tabViewStyle(PageTabViewStyle())
}
}
如果有人有任何指示,请告诉我!