我遇到一个问题,当我关闭应用程序以将其发送到后台然后重新打开它时,它不会转到最后一个屏幕。相反,它似乎会重置,就像应用程序从头开始打开一样。
\n我在下面举了一个例子。在 iPad 上以横向模式运行它,选择“收藏夹”。详细信息控制器将显示红色屏幕。关闭应用程序以将其发送到后台,打开任何其他应用程序,然后返回到测试应用程序。您会看到它重置为绿色视图。它应该停留在红色视图上。
\n我直接从 Fruta 示例项目中获取了所有代码,该项目没有这种行为,所以我不知道发生了什么。
\n编辑
\n我已经像 Asperi 建议的那样将 SideBar 设为独立列表,并且我现在也按照 Apple 的建议使用 SceneStorage。使用 SceneStorage 首先解决了侧边栏问题,但当我深入导航堆栈的多个级别时,核心问题仍然存在。
\n在此更新的示例中,如果您点击侧边栏中的 Numbers,然后选择一行,离开应用程序,并在执行其他操作后返回,侧边栏选择将重置。
\n我发现只有当您的应用程序支持多个窗口时这才是问题。如果您取消选中该框,则所有这些似乎都没有必要。
\n下面的示例包含最新的代码编辑。
\n编辑
\n我联系了 Apple 代码级支持,他们重新扣款了我的帐户,告诉我我的问题可能是一个错误,并建议我提交雷达报告。我\xe2\x80\x99m 并不完全确定它\xe2\x80\x99 是一个框架错误。
\nstruct ContentView: View {\n #if os(iOS)\n @Environment(\\.horizontalSizeClass) private var horizontalSizeClass\n #endif\n \n var body: some View {\n #if os(iOS)\n if horizontalSizeClass == .compact {\n AppTabNavigation()\n } else {\n AppSidebarNavigation()\n }\n #else\n AppSidebarNavigation()\n #endif\n }\n}\n\nstruct ContentView_Previews: PreviewProvider {\n static var previews: some View {\n ContentView()\n }\n}\n\n\n// MARK: - AppTabNavigation\nstruct AppTabNavigation: View {\n @State private var selection: Tab = .menu\n\n enum Tab {\n case menu\n case favorites\n case rewards\n case recipes\n }\n \n var body: some View {\n TabView(selection: $selection) {\n NavigationView {\n Color.purple\n }\n .tabItem {\n Label("Menu", systemImage: "list.bullet")\n .accessibility(label: Text("Menu"))\n }\n .tag(Tab.menu)\n \n NavigationView {\n Color.orange\n }\n .tabItem {\n Label("Favorites", systemImage: "heart.fill")\n .accessibility(label: Text("Favorites"))\n }\n .tag(Tab.favorites)\n \n NavigationView {\n Color.red\n }\n .tabItem {\n Label("Numbers", systemImage: "book.closed.fill")\n .accessibility(label: Text("Numbers"))\n }\n .tag(Tab.recipes)\n }\n }\n}\n\nenum NavigationItem: String {\n case menu\n case favorites\n case recipes\n}\n\nstruct SideBar: View{\n @Binding var selection: String?\n \n var body: some View {\n List(selection: $selection) {\n NavigationLink(destination: Color.green, tag: NavigationItem.menu.rawValue, selection: $selection) {\n Label("Menu", systemImage: "list.bullet")\n }\n \n NavigationLink(destination: Color.red, tag: NavigationItem.favorites.rawValue, selection: $selection) {\n Label("Favorites", systemImage: "heart")\n }\n \n NavigationLink(destination: ListView(), tag: NavigationItem.recipes.rawValue, selection: $selection) {\n Label("Numbers", systemImage: "book.closed")\n }\n }\n .listStyle(SidebarListStyle())\n }\n}\n\n\nstruct AppSidebarNavigation: View {\n @SceneStorage("ContentView.selection") private var selection: String?\n \n var body: some View {\n NavigationView {\n SideBar(selection: $selection)\n\n Text("Select a category")\n .foregroundColor(.secondary)\n }\n }\n}\n\nstruct ListView: View{\n @SceneStorage("ListView.selection") private var selection: String?\n \n var body: some View{\n List(0..<20){ num in\n NavigationLink(destination: ListDetails(num: num), tag: num.description, selection: $selection) {\n Text(num.description)\n }\n }\n }\n}\n\n\nstruct ListDetails: View{\n let num: Int\n \n var body: some View{\n Text(num.description)\n .font(.title)\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
可计算属性sidebar重新评估导致List重建,请使用独立视图,例如
enum NavigationItem {
case menu
case favorites
case recipes
}
struct AppSidebarNavigation: View {
@State private var selection: NavigationItem? = .menu
@State private var presentingRewards = false
var body: some View {
NavigationView {
SideBarView(selection: $selection)
Text("Select a category")
.foregroundColor(.secondary)
}
}
}
struct SideBarView: View {
@Binding var selection: NavigationItem?
var body: some View {
List(selection: $selection) {
NavigationLink(destination: Color.green, tag: NavigationItem.menu, selection: $selection) {
Label("Menu", systemImage: "list.bullet")
}
.tag(NavigationItem.menu)
NavigationLink(destination: Color.red, tag: NavigationItem.favorites, selection: $selection) {
Label("Favorites", systemImage: "heart")
}
.tag(NavigationItem.favorites)
NavigationLink(destination: Color.blue, tag: NavigationItem.recipes, selection: $selection) {
Label("Recipes", systemImage: "book.closed")
}
.tag(NavigationItem.recipes)
}
.listStyle(SidebarListStyle())
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
844 次 |
| 最近记录: |