【问题标题】:Why is the modifier .navigationBarTitle not applied to NavigationView?为什么修饰符 .navigationBarTitle 没有应用于 NavigationView?
【发布时间】:2019-10-23 15:41:49
【问题描述】:

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

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

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

【问题讨论】:

  • 记录在案:developer.apple.com/documentation/swiftui/view/…:“此修饰符仅在此视图位于 NavigationView 内部且可见时才生效。”
  • 是的,我已经读过,但我觉得它在逻辑上没有意义,考虑到修饰符修改了它所应用的视图并且导航栏标题实际上是 nothingText 对象有关。
  • 你甚至可以将它设置在视图层次结构中更深的位置(即在 VStack 中的 Toggle 中的 Spacer 上......)我不知道为什么它会这样工作。

标签: swift swiftui


【解决方案1】:

因为.navigationBarTitle()是NavigationView内部View上的修饰符,它不在NavigationView上。 .navigationBarItem() 也是如此。 请参考Building Lists and Navigation

【讨论】:

    【解决方案2】:

    像 Martin linked tonavigationBarTitle 仅在包含在 NavigationView 中时才有效。这在 ~52:30 的 SwiftUI Essentials 演讲中进行了简要讨论。标题最终流向NavigationView,因此被推送的视图也可以提供自己的标题(例如,在 ~54:00 被推送的视图)。

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

    它类似于UIViewControllernavigationItem 属性,附加到每个推送的视图而不是UINavigationController 本身。

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 2014-06-09
      • 2012-01-30
      • 2011-07-15
      • 1970-01-01
      • 2011-04-12
      • 2021-03-26
      • 2010-09-13
      • 1970-01-01
      相关资源
      最近更新 更多