SwiftUI NavigationLink立即向后导航 [英] SwiftUI NavigationLink immediately navigates back

查看:292
本文介绍了SwiftUI NavigationLink立即向后导航的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用SwiftUI从行创建NavigationLinks到NavigationView中的详细视图(类似于教程

I am using SwiftUI to create NavigationLinks from rows to detail views in a NavigationView (similar to what is being done in the tutorial https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation). However, when I test in my app, the NavgiationLink immediately navigates back from the detail view to the previous view after being tapped (the detail view only shows up for only a second).

以下是代码:

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) { ... }时,导航按预期工作.

It seems like this could be a problem with the Results<Item> object that is return from realm.objects(Item.self). When I tried it with static data using let items = [Item(), Item()] and then calling ForEach(items) { ... }, the navigation worked as expected.

推荐答案

通过将ForEach(Query.items)更改为ForEach(Array(Query.items))以使数据静态来解决此问题.

Fixed it by changing ForEach(Query.items) to ForEach(Array(Query.items)) to make the data static.

这篇关于SwiftUI NavigationLink立即向后导航的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆