我正在使用Apple的官方教程学习SwiftUI
:
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
Xcode看起来像这样:
根据本教程,它应该显示导航标题,但就我而言不显示。
知道为什么吗?谢谢!
答案 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"))
}
}
}
,如果您考虑一下,这是有道理的。随着View
中NavigationView
的更改,新的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
}
}
}