为什么使用SwiftUI不会显示导航标题?

Yim*_*ong 9 ios swift swiftui

我正在SwiftUI使用Apple的官方教程进行学习:https//developer.apple.com/tutorials/swiftui/building-lists-and-navigation

一切工作正常,直到我尝试NavigationView通过调用在上显示导航标题.navigationBarTitle

我试图刷新实时视图,重新启动Xcode,但它仍然没有显示。

这是我的代码:

import SwiftUI

struct LandmarkList : View {
    var body: some View {
        NavigationView {
            List(landmarkData) { landmark in
                LandmarkRow(landmark: landmark)
            }
        }
        .navigationBarItem(title: Text("Done"))
        .navigationBarTitle(Text("Landmarks"))
    }
}

#if DEBUG
struct LandmarkList_Previews : PreviewProvider {
    static var previews: some View {
        LandmarkList()
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)

Xcode看起来像这样:

屏幕截图

根据教程,它应该显示导航标题,但就我而言不显示。

知道为什么吗?谢谢!

vac*_*ama 37

.navigationBarTitle().navigationBarItem()是的修饰符,位于的View内部,而NavigationView不是其NavigationView本身:

struct LandmarkList: View {
    var body: some View {
        NavigationView {
            List(landmarkData) { landmark in
                LandmarkRow(landmark: landmark)
            }
            .navigationBarItem(title: Text("Done"))
            .navigationBarTitle(Text("Landmarks"))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您考虑一下,这是有道理的。由于View该内NavigationView改变,新View使然导航栏的标题和内容应该是什么。

  • NavigationBarItem也是如此。 (2认同)
  • 起初我与我的屏幕争论,直到我重新思考你所说的“新视图决定了导航栏的标题和内容应该是什么”......宾果游戏! (2认同)

Moj*_*ini 8

描述:

NavigationView只是一些内容的容器。当您从一页导航到另一页时,内容会发生变化,但NavigationView仍然存在。

关键是当它显示NavigationView每个view的内容时显示它。所以它将与目的地一起封装。

最后,你要添加的所有导航修饰导航里面(的内容)


例子:

struct Content: View {
    var body: some View {
        Text("Some. content")
            .navigationBarItem(title: Text("Done"))
            .navigationBarTitle(Text("Landmarks"))
    }
}
Run Code Online (Sandbox Code Playgroud)
struct Parent: View {
    var body: some View {
        NavigationView {
            Content() // This contains navigation modifiers inside the view itself
        }
    }
}
Run Code Online (Sandbox Code Playgroud)