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

0mkxixxg  于 2023-06-28  发布在  Swift
关注(0)|答案(5)|浏览(213)

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

根据教程,它应该显示导航标题,但它没有在我的情况下。
知道为什么吗谢谢!

qco9c6ql

qco9c6ql1#

.navigationBarTitle().navigationBarItem()NavigationView内部View的修饰符,而不是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将指定导航栏的标题和内容。

qf9go6mv

qf9go6mv2#

说明:

NavigationView只是一个内容的容器。当您从一个页面导航到另一个页面时,内容会发生变化,但NavigationView仍然存在。
关键是NavigationView在显示每个view的内容时显示它。所以它会封装到目的地。
最后,您应该在导航内添加所有导航修饰符(在内容上)
从️iOS 14+开始,您应该使用ToolbarItem而不是navigationBarItem,如下所示

示例:

struct Content: View {
    var body: some View {
        Text("Some. content")

            // iOS 14+
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) { Text("Done") }
            }

            // iOS 13-16.4(deprecated) - You can use toolbar now
            // .navigationBarItems(trailing: Text("Done"))

            .navigationBarTitle(Text("Landmarks"))
    }
}
struct Parent: View {
    var body: some View {
        NavigationView {
            Content() // This contains navigation modifiers inside the view itself
        }
    }
}
ui7jx7zq

ui7jx7zq3#

如果有人在寻找导航标题标签按钮,这段代码可能会有帮助-

struct ContentView: View {
    var body: some View {
        NavigationView {
            Text("SwiftUI")
                .navigationTitle("Screen Title")
                .toolbar {
                    Button("Right") {
                        print("Right button tapped!")
                    }
                }
        }
    }
}
w46czmvw

w46czmvw4#

如果你到达这里并使用NavigationStack(实际上NavigationView有一个警告,自iOS 16以来将不再使用),只需将.navigationTitle("My title")修饰符放在NavigationStack的内容上,而不是NavigationStack本身。
例如

var body: some View {
    NavigationStack(path: $path) {
        List {
            [...]
        }
        .navigationTitle("My title")  //    <<-- !! Modifier goes here !!
    }
}
56lgkhnf

56lgkhnf5#

.modifier(NavigationView())必须添加在.navigationBar* 修饰符之后,而不是之前

相关问题