方向更改后主从细节不起作用(iPhone 13 Pro Max)

Master Detail doesn't work after orientation change (iPhone 13 Pro Max)

概览:

问题:

规格:

重现步骤:

  1. 运行 使用代码部分给出的代码的项目
  2. 在纵向模式下使用应用程序并注意点击每个主要项目时,细节会按预期显示。
  3. 将模拟器旋转到横向模式,现在再次点击每个主项目,细节如预期显示
  4. 将模拟器旋转回纵向模式,现在点击主项目。

预期行为:

在第 4 步中,点击主项目后需要显示详细信息屏幕

实际行为:

在第 4 步中,点击主项目后,单元格被选中但未导航到详细信息屏幕。它停留在单元格选择状态。应用程序不会挂起,但点击每个单元格会突出显示该单元格,但不会显示详细信息屏幕。

屏幕录制 Gif

问题:

代码:

内容视图

struct ContentView: View {
    
    var body: some View {
        NavigationView {
            StudentList()
        }
    }
}

学生名单

struct StudentList: View {

    @StateObject var school = School()
    @State private var selectedStudent: Student?

    var body: some View {
        List(school.students, selection: $selectedStudent) { student in
            NavigationLink {
                StudentDetail(student: student)
            } label: {
                Text(student.name)
            }
        }
    }
}

学生详情

struct StudentDetail: View {
    let student: Student?
    
    var body: some View {
        if let student = student {
            VStack {
                Text("ID  : \(student.id)")
                Text("Name: \(student.name)")
            }
        } else {
            Text("No student selected")
        }
    }
}

学校

class School: ObservableObject {
    @Published var students = [Student(id: 1, name: "aaa", marks: 100),
                               Student(id: 2, name: "bbb", marks: 83),
                               Student(id: 3, name: "ccc", marks: 42),
                               Student(id: 4, name: "ddd", marks: 92),
                               Student(id: 5, name: "eee", marks: 28)]
}

学生

struct Student: Identifiable, Hashable {
    var id: Int
    var name: String
    var marks: Int
}

这似乎是一个 SwiftUI 错误,应该报告给反馈助手。 NavigationView 在应该切换回堆栈样式时卡在列样式中。

我在列样式 NavigationView 样式和 IMO 中遇到了大量错误,它不应该在当前状态下用于生产。您可以将 .navigationViewStyle(.stack) 添加到 NavigationView 以强制它保持堆栈样式并避免这些问题。