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

Why The Navigation Title doesn't show up using SwiftUI?

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

一切正常,直到我尝试通过调用 .navigationBarTitleNavigationView 上显示导航标题。

我试过刷新实时取景,重启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

Xcode 看起来像这样:

根据教程,它应该显示导航标题,但在我的例子中没有。

知道为什么吗?谢谢!

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

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

如果你仔细想想,这是有道理的。随着 NavigationView 中的 View 发生变化,新的 View 规定了导航栏的标题和内容。

描述:

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

重点是 NavigationView 在显示每个 view 的内容时显示它。所以它会封装目的地。

最后,您应该在导航中添加所有导航修饰符(在内容上)


示例:

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