我遇到一个问题,当我关闭应用程序以将其发送到后台然后重新打开它时,它不会转到最后一个屏幕。相反,它似乎会重置,就像应用程序从头开始打开一样。
\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}\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())
    }
}
| 归档时间: | 
 | 
| 查看次数: | 844 次 | 
| 最近记录: |