我有一个带有侧边栏和详细信息视图的NavigationSplitView。从侧边栏中选择项目时,详细信息视图会更新以显示所选内容。到目前为止,这一切在 iPhone 和 iPad 上都运行良好。
然而,在 iPhone 上,当返回侧边栏视图选择其他内容时,之前选择的项目将被设置为 nil。
在 iPad 上,它不会将之前选择的项目设置为零,即使您隐藏并显示侧边栏,它仍然会记住之前选择的条目。
我也尝试过 iPhone 模拟器和物理设备。
要重现该问题,请参阅下面的小(完整)代码。在模拟器或物理设备上运行它。从侧边栏中选择一个条目,将显示/更新详细信息以显示所选内容。返回到侧边栏视图,您可以看到大约半秒钟之前选择的项目仍然处于选中状态,然后它被设置为 nil。
返回侧边栏视图时,为什么 iPhone 上的选择会重置为零?
import SwiftUI
struct ContentView: View {
@State private var selection: String?
var body: some View {
NavigationSplitView {
SidebarView(selection: $selection)
} detail: {
DetailView(selection: $selection)
}
}
}
struct SidebarView: View {
@Binding var selection: String?
let people = ["Finn", "Leia", "Luke", "Rey"]
var body: some View {
List(people, id: \.self, selection: $selection) { person in
Text(person)
}
Text("selection = \(String(describing: selection))")
}
}
struct DetailView: View {
@Binding var selection: String?
var body: some View {
Text("selectedItem = \(String(describing: selection))")
}
}
#Preview {
ContentView()
}
请参阅下面的 GIF。注意屏幕底部的侧边栏。返回到侧边栏时,您会看到它仍然显示先前选择的项目,时间很短,大约半秒左右。然后它被清除为零。