SwiftUI NavigationLink 立即导航回来
Posted
技术标签:
【中文标题】SwiftUI NavigationLink 立即导航回来【英文标题】:SwiftUI NavigationLink immediately navigates back 【发布时间】:2020-04-27 11:31:55 【问题描述】:我正在使用 SwiftUI
在 NavigationView 中创建从行到详细视图的 NavigationLinks
(类似于教程 https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation 中所做的事情)。但是,当我在我的应用程序中进行测试时,NavgiationLink 在被点击后会立即从详细视图导航回上一个视图(详细视图仅显示一秒钟)。
代码如下:
struct ItemsView: View
var body: some View
NavigationView
VStack
List
ForEach(Query.items) item in
NavigationLink(destination: ItemDetail(item: item))
ItemRow(item: item)
Spacer()
.navigationBarTitle(Text("Items"))
private struct ItemRow: View
var item: Item
var body: some View
VStack(alignment: .leading)
Text(item.title)
.font(.headline)
item.completionDate.map(
Text("Created \($0.shortDateTime)")
)
item.completionDate.map(
Text("Active \(Date().offsetString(from: $0)) ago")
)
struct ItemDetail: View
var item: Item
var body: some View
VStack
Text("\(item.title)")
Text("\(String(describing: item.creationDate))")
Text("\(String(describing: item.completionDate))")
Text("\(item.complete)")
.navigationBarTitle(Text("Item"), displayMode: .inline)
Query
是使用 Realm
完成的:
let realm = try! Realm()
class Query
static let items = realm.objects(Item.self)
这似乎是从realm.objects(Item.self)
返回的Results<Item>
对象的问题。当我使用let items = [Item(), Item()]
尝试使用静态数据然后调用ForEach(items) ...
时,导航按预期工作。
【问题讨论】:
【参考方案1】:通过将 ForEach(Query.items)
更改为 ForEach(Array(Query.items))
以使数据静态化来修复它。
【讨论】:
静态数据是什么意思? 领域查询返回一个Results
实例,该实例与领域中所做的更改保持同步。见realm.io/docs/swift/latest/#queries。我将Results
实例的类型更改为Array
以正确地将对象传递给SwiftUI 的ForEach
函数。【参考方案2】:
原因是ForEach(Query.items, id: \.self)
缺少标识符。当您添加一个 hashable
或 \.self
时。列表应该像魅力一样工作。
【讨论】:
谢谢。我刚刚尝试过,列表运行良好,但在我点击它后,navigationLink 仍会立即路由回原始视图。RealmSwift
Results
对象似乎有问题。当我尝试使用静态数据时,导航按预期工作。
问题依然存在,使用id: \.self
,***.com/questions/62275502/…查看简单设置以上是关于SwiftUI NavigationLink 立即导航回来的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:如果在 ForEach 中使用 NavigationLink 会立即弹出
SwiftUI:在 Tabview 的 WatchOS 8.1RC 上立即弹出 NavigationLink
如果它不可见,SwiftUI 如何使 NavigationLink 工作?
SwiftUI NavigationLink:成功运行帐户创建代码后导航到目标视图