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

时间:2019-06-19 01:32:42

标签: ios swift swiftui

我正在使用Apple的官方教程学习SwiftUIhttps://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

Xcode看起来像这样:

Screenshot

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

知道为什么吗?谢谢!

2 个答案:

答案 0 :(得分:4)

.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"))
        }
    }
}

,如果您考虑一下,这是有道理的。随着ViewNavigationView的更改,新的View决定了导航栏的标题和内容。

答案 1 :(得分:1)

说明:

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
        }
    }
}