【问题标题】:Why The Navigation Title doesn't show up using SwiftUI?为什么使用 SwiftUI 不显示导航标题?
【发布时间】:2019-11-01 16:17:23
【问题描述】:

我正在使用苹果官方教程学习SwiftUIhttps://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 看起来像这样:

根据教程,它应该显示导航标题,但在我的情况下没有。

知道为什么吗?谢谢!

【问题讨论】:

  • 截图链接失效
  • @Nizzam 我认为它现在可以工作了,请再试一次。

标签: ios swift swiftui


【解决方案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
        }
    }
}

【讨论】:

  • 流行的答案“说”同样的事情,但这个答案“显示”了它。现在我很清楚了。
【解决方案2】:

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

如果你仔细想想,这是有道理的。随着NavigationView 中的View 发生变化,新的View 指示导航栏的标题和内容应该是什么。

【讨论】:

  • NavigationBarItem 也是如此。
  • 感谢@matt,我将其添加到答案中。
  • 一开始我还在和我的屏幕争论,直到我重新思考你所说的“新视图决定导航栏的标题和内容应该是什么”......然后宾果游戏!
  • 认为 xcode 或 swift 有问题,直到我将代码移到 NavigationView 中并且它运行良好
  • 感谢简短而清晰的解释。
猜你喜欢
  • 2023-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 2016-10-27
相关资源
最近更新 更多