SwiftUI:MasterDetailView在选项卡式视图中丢失;“国家”;
我在选项卡式视图中有一个MasterDetailView。如果用户选项卡MasterDetailView并在master view中选择条目,则详细信息将显示在详细信息视图中。选择另一个选项卡并切换回MasterDetailView后,将不再选择细节-MasterDetailView将完全失去其状态,就像完全渲染一样SwiftUI:MasterDetailView在选项卡式视图中丢失;“国家”;,swiftui,master-detail,tabbed-view,Swiftui,Master Detail,Tabbed View,我在选项卡式视图中有一个MasterDetailView。如果用户选项卡MasterDetailView并在master view中选择条目,则详细信息将显示在详细信息视图中。选择另一个选项卡并切换回MasterDetailView后,将不再选择细节-MasterDetailView将完全失去其状态,就像完全渲染一样 private let dateFormatter: DateFormatter = { let dateFormatter = DateFormatter() d
private let dateFormatter: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .medium
return dateFormatter
}()
struct MasterDetailView: View {
@State private var dates = [Date]()
var body: some View {
NavigationView {
MasterView(dates: $dates)
.navigationBarTitle(Text("Master"))
.navigationBarItems(
leading: EditButton(),
trailing: Button(
action: {
withAnimation { self.dates.insert(Date(), at: 0) }
}
) {
Image(systemName: "plus")
}
)
DetailView()
}.navigationViewStyle(DoubleColumnNavigationViewStyle())
}
}
struct MasterView: View {
@Binding var dates: [Date]
var body: some View {
List {
ForEach(dates, id: \.self) { date in
NavigationLink(
destination: DetailView(selectedDate: date)
) {
Text("\(date, formatter: dateFormatter)")
}
}.onDelete { indices in
indices.forEach { self.dates.remove(at: $0) }
}
}
}
}
struct DetailView: View {
var selectedDate: Date?
var body: some View {
Group {
if selectedDate != nil {
Text("\(selectedDate!, formatter: dateFormatter)")
} else {
Text("Detail view content goes here")
}
}.navigationBarTitle(Text("Detail"))
}
}
struct ContentView: View {
@State private var selection = 0
var body: some View {
TabView(selection: $selection){
Text("First View")
.font(.title)
.tabItem {
VStack {
Image("first")
Text("First")
}
}
.tag(0)
MasterDetailView()
.tabItem {
VStack {
Image("second")
Text("Master Detail")
}
}
.tag(1)
}
}
}
当用户选择该选项卡时,是否有办法“重用”MasterDetailView
我知道我可以使用@State和@Binding来保存和恢复状态(如主视图中的所选条目),在这个简单的示例中,这可能是一个解决方案。但是在一个复杂的应用程序中——例如当MasterDetailView包含一个深度视图层次结构时——管理(保存和恢复)视图的完整状态是没有用的 关于这个问题的变体已经被问了好几次,到目前为止,一致认为SwiftUI还不支持这个用例。我相信这是他们的雷达,但更多的人谁,更可能是优先为明年的更新
这里有人通过包装UITabBarController以用于SwiftUI而获得了您想要的行为。好问题,我刚刚发布了类似的内容。对我来说,这几乎杀死了SwiftUI,原因也差不多。