方向更改后主从细节不起作用(iPhone 13 Pro Max)
Master Detail doesn't work after orientation change (iPhone 13 Pro Max)
概览:
- 我有一个显示主列表和相应详细列表的 SwiftUI 应用程序
问题:
- 在iPhone 13 Pro Max模拟器上,点击主物品时,细节不显示(参见重现步骤)。
规格:
- Xcode:版本 13.3.1 (13E500a)
- 设备:iPhone 13 Pro Max 模拟器
重现步骤:
- 运行 使用代码部分给出的代码的项目
- 在纵向模式下使用应用程序并注意点击每个主要项目时,细节会按预期显示。
- 将模拟器旋转到横向模式,现在再次点击每个主项目,细节如预期显示
- 将模拟器旋转回纵向模式,现在点击主项目。
预期行为:
在第 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 以强制它保持堆栈样式并避免这些问题。
概览:
- 我有一个显示主列表和相应详细列表的 SwiftUI 应用程序
问题:
- 在iPhone 13 Pro Max模拟器上,点击主物品时,细节不显示(参见重现步骤)。
规格:
- Xcode:版本 13.3.1 (13E500a)
- 设备:iPhone 13 Pro Max 模拟器
重现步骤:
- 运行 使用代码部分给出的代码的项目
- 在纵向模式下使用应用程序并注意点击每个主要项目时,细节会按预期显示。
- 将模拟器旋转到横向模式,现在再次点击每个主项目,细节如预期显示
- 将模拟器旋转回纵向模式,现在点击主项目。
预期行为:
在第 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 以强制它保持堆栈样式并避免这些问题。