从一个列表到第二个列表

from one list to a second List

用户从第一个列表视图中选择了一行。然后出现第二个列表视图,用户再次选择一行,然后我们进入详细视图(参见屏幕转储)。有几件事我不明白。

  1. 为什么 'pantanal' 图像在所有三个视图上重复出现?
  2. 在详细视图中我得到两个 'back buttons'。我只想要其中之一 课程。顺便说一句,为什么一个按钮叫做 'Back' 而不是 'Development'?
  3. 为什么列表视图 2 中的图像和 名单?

我的第一个列表视图代码:

struct EggList: View {
    var eggs = Egg.all()
    var body: some View {
        VStack{
           Image("Pantanal")
                .resizable()
                .scaledToFill()
                .clipped()
                .listRowInsets(EdgeInsets())
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: 250)
                .edgesIgnoringSafeArea(.all)
                .aspectRatio(contentMode: .fit)

            NavigationView {
                List(eggs) { egg in
                    NavigationLink(destination: EggDayList(egg: egg)) {
                        CellRow(egg: egg)
                    }
                }
                .navigationBarTitle(Text("Egg overview"), displayMode: .inline)
            }
        }
    }
}

我的第二个列表视图代码:

struct EggDayList: View {
    var egg = Egg.all().first
    var body: some View {
        NavigationView {
            List(egg!.calcWeights) { eggDay in
                NavigationLink(destination: EggDetail()) {
                    CellDayRow(eggDay: eggDay)
                }
            }
        }.navigationBarTitle("Development")
    }
}

1 : 您定义了多个导航。但是第一个在每一页上重复。所以你会在每一页上看到 header。如果您不喜欢这种行为,请将图像 移到 NavigationView

2.1 : 因为你设置了两个导航,把第二个去掉,你只会看到一个后退按钮

2.2:因为navigationBarTitle应该在里面NavigationView。喜欢:

NavigationView {
   Text("test").navigationBarTitle("This navigation title will be used for next back button")
}

3 : 因为有多个NavigationView,所以每次翻到下一页,新的NavigationView在列表上方初始化(没有标题)看起来像空的space.

注意 NavigationView 类似于 UINavigationController。所以每次你构建一个,就好像你构建了一个新的控制器。但只需要一个控制器。