自动弹出导航链接问题
Posted
技术标签:
【中文标题】自动弹出导航链接问题【英文标题】:Auto pop navigation link issue 【发布时间】:2021-12-28 19:31:56 【问题描述】:我对通过导航链接推送的 auto view poping
视图有疑问。
在我的ContentView
上是一个可以在几秒钟后更改的列表,但是如果我在它之前推送一个新视图,新数据出现后会自动弹出新视图。这是意想不到的行为。是 SwiftUI 3 的错误还是我的错误? ios 15 上的问题
我的视图模型
class ViewModel: ObservableObject
@Published var list: [Int] = [1, 2, 3, 4, 5, 6, 7, 8]
func changeAfterTime()
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) [weak self] in
self?.list = [9,10,11]
我的内容视图
struct ContentView: View
@EnvironmentObject var viewModel: ViewModel
@State private var selection: Int?
var body: some View
NavigationView
List(viewModel.list, id: \.self) element in
VStack
Text(element, format: .number)
NavigationLink("", tag: element, selection: $selection)
TestView()
.opacity(.zero)
.onAppear
viewModel.changeAfterTime()
struct TestView: View
var body: some View
Text("Wait")
我附上了一个关于这个问题的视频
【问题讨论】:
【参考方案1】:在重新创建视图时,活动的NavigationLink
与元素一起被删除,因为绑定发生了变化。这会导致视图以动画方式返回到初始列表。
如果您在 2 秒后将值 8 添加到您设置的值列表中,并且您最初从列表中选择 8,您可以观察到它不会弹出 TestView
,因为元素 8 及其关联的视图部分(包括NavigationLink
)不会被删除,但如果您选择了 1 到 7 中的任何一个值,它仍然会被删除。
【讨论】:
嘿@Charles A. 我知道这个案子,但不是我的。我对 2 秒后数组更改后是否有可能保留现有视图感兴趣。 @PiterPan 啊,那不是你的问题。您可能可以在列表之外设置一个NavigationLink
(不是每行中的),当您的列表更改时不会被删除,然后使用每个列表元素中的按钮设置触发NavigationLink
的状态值。跨度>
以上是关于自动弹出导航链接问题的主要内容,如果未能解决你的问题,请参考以下文章