如何在 TabView SwiftUI 中保存视图的列表状态
Posted
技术标签:
【中文标题】如何在 TabView SwiftUI 中保存视图的列表状态【英文标题】:How to save List state for View in TabView SwiftUI 【发布时间】:2020-03-13 09:39:15 【问题描述】:我在 SwiftUI 中有一个带有标签的 TabView。当我从一个 FirstView 滚动列表并点击另一个选项卡并切换回 FirstView 时,我在 FirstView 中的列表会自动重绘并滚动到顶部。如何解决这个问题。
enter link description here
这是第一视图
var body: some View
NavigationView
List
ForEach(feed) game in
FeedCardItem(gameModel: game)
.frame(width: UIScreen.main.bounds.width - 30, height: 400)
.navigationBarTitle(Text("Новое сегодня"))
这是 TabView 实现
TabView (selection: $currentTab)
FeedView().tabItem
Image(systemName: currentTab == 0 ? "house.fill" : "house")
.renderingMode(.original)
.imageScale(.large)
.tag(0)
RecommendationsView().tabItem
Image(systemName: currentTab == 1 ? "gamecontroller.fill" : "gamecontroller")
.renderingMode(.original)
.imageScale(.large)
.tag(1)
SearchView().tabItem
Image(systemName: currentTab == 2 ? "flame.fill" : "flame")
.renderingMode(.original)
.imageScale(.large)
.tag(2)
NotificationsView().tabItem
Image(systemName: currentTab == 3 ? "bell.fill" : "bell")
.renderingMode(.original)
.imageScale(.large)
.tag(3)
ProfileView().tabItem
Image(systemName: currentTab == 4 ? "person.fill" : "person")
.renderingMode(.original)
.imageScale(.large)
.tag(4)
.edgesIgnoringSafeArea(.top)
【问题讨论】:
提供一些可以运行和调试的最小代码。这将有助于提供快速答案。 @FelixMarianayagam 添加了 应该可以。 【参考方案1】:我认为通过 SwiftUI 是不可能的。另一种方法是在 UIKit 中创建 tabview 并在 SwiftUI 中使用它。
我创建了一个快速示例,说明如何实现这一目标以及它如何解决您的问题。如果您有任何其他问题,请告诉我。
我已将代码上传到 GitHub。 https://github.com/subhan5/TabTest
在上传的代码中,UITab 文件夹包含通过 UIKit 创建的 tabview。 在 ContentView 中,我和 UIViewControllerRepresentable 一样转换并使用它。
【讨论】:
这是一个错误吗? Apple 没有提供 Tabs 的正确操作? 是的,Apple 目前还没有为 SwiftUI 提供它。 但是如果我想在SwiftUI中创建非常漂亮的自定义标签栏,我不能在保持状态的同时使用它吗? 目前,SwiftUI 有这个限制。【参考方案2】:这里描述的 UITableViewConfigurator 是可能的:Scroll SwiftUI List to new selection
当然……这使用 UIViewControllerRepresentable....
【讨论】:
【参考方案3】:我也有同样的问题,找到了这个解决方案:https://kavsoft.dev/SwiftUI_2.0/Tab_Bar
基本上,您可以只隐藏一个选项卡的内容,而不是用另一个内容视图替换它。我认为这个解决方案有点棘手,但很有效。
【讨论】:
以上是关于如何在 TabView SwiftUI 中保存视图的列表状态的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swiftui 中弹出到 TabView 应用程序中的特定视图。我也使用了 StackNavigation 但不在 swiftui 中工作
ios 13 SwiftUI向后导航时如何避免导航视图内的TabView应用崩溃