Ios SwiftUI-在包含.toolbar的最小项目中显示.sheet时崩溃
我在特定条件下展示工作表时遇到了一个奇怪的崩溃。我能够在一个启动项目中复制它,并且得到了多人的确认,它在他们的端也崩溃了。奇怪的是,对于一些模拟器/用户来说,这些步骤不会使应用程序崩溃 我已经向苹果公司(FB9064549)提交了一份Bug报告,但我想我也应该在这里问一下 再现碰撞的步骤如下所示:Ios SwiftUI-在包含.toolbar的最小项目中显示.sheet时崩溃,ios,swift,swiftui,Ios,Swift,Swiftui,我在特定条件下展示工作表时遇到了一个奇怪的崩溃。我能够在一个启动项目中复制它,并且得到了多人的确认,它在他们的端也崩溃了。奇怪的是,对于一些模拟器/用户来说,这些步骤不会使应用程序崩溃 我已经向苹果公司(FB9064549)提交了一份Bug报告,但我想我也应该在这里问一下 再现碰撞的步骤如下所示: 单击“打开详细视图”按钮 回去 再次单击“打开详细视图”按钮 单击“当前模式” 它会崩溃的 基本内容视图有一个工具栏,其中有一个菜单(或只是一个普通文本)和一个导航链接,用于推送到新页面。如果我注释掉
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。如果我改用全屏,它不会崩溃
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()
}
}
}
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())
}
}
显示的工作表是基本的选项卡式分页。如果我不添加PageTabViewStyle,它不会崩溃
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()
}
}
}
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())
}
}
struct ModalWithTabView:View{
@状态变量currentStep=0
var body:一些观点{
选项卡视图(选择:$currentStep){
ForEach(0..<10){index in
文本(“第\(索引)”页)
.tag(索引)
}
}
//如果您对此进行注释,它不会崩溃
.tabViewStyle(PageTabViewStyle())
}
}
如果有人有任何建议,请告诉我 我不确定您的UI应该是什么样子,将工具栏添加到导航链接对我来说有点奇怪,可能会将其添加到NavigationView,或者将NavigationLink包装在堆栈上?工具栏需要位于NavigationView内才能工作,作为内容本身的修改器。在本例中,只有一个NavigationLink,这就是为什么它直接位于其上。当我将NavigationLink包装在VStack中时,同样的情况也会发生。为了清楚起见,我更新了我的问题。