为什么修改器.navigationBarTitle不应用于NavigationView?

时间:2019-06-08 11:47:07

标签: swift swiftui

在SwiftUI中,我知道修饰符用于修改视图。修改视图时,修饰符返回包裹在_ModifiedContent中的视图。
将我的视图嵌入NavigationView中并分配导航栏标题时,如下所示:(如Apple的官方教程所示)

NavigationView {
    Text("Hello, World!")
        .navigationBarTitle(Text("My first SwiftUI App"))
}

...为什么导航栏标题的修饰符应用于Text,而不应用于NavigationView

2 个答案:

答案 0 :(得分:5)

像马丁linked tonavigationBarTitle一样,仅当包含在NavigationView中时才起作用。在SwiftUI Essentials的〜52:30讨论中对此进行了简要讨论。标题最终流到NavigationView,因此被推送的视图也可以提供自己的标题(例如,在〜54:00被推送的视图)。

如果标题直接附加到NavigationView,则需要预先确定所有可能的标题,并将其从与标题关联的视图中删除。

它类似于UIViewController的{​​{1}}属性,该属性附加到每个推送视图,而不是navigationItem本身。

答案 1 :(得分:1)

因为 .navigationBarTitle() 是NavigationView内部的View上的修改器,所以它不在NavigationView上。 .navigationBarItem() 也是这样。 请参阅Building Lists and Navigation