SwiftUI 如何像在 UIKit 中一样为 NavigationBar titleView 设置图像?

Zee*_*med 7 swift5 swiftui ios-navigationview

我想在 SwiftUI 中的 NavigationBar 的 titleView 中设置图像,就像我们在 UIKit 中所做的那样

navigationItem.titleView = UIImageView(image: UIImage(named: "logo"))
Run Code Online (Sandbox Code Playgroud)

这就是我们在 UIKit 中的做法。

有人知道怎么做吗?

Vat*_*not 9

这是如何做到的:

  1. SwiftUIX添加到您的项目中。
  2. 通过设置您的自定义标题视图 View.navigationBarTitleView(_:displayMode:)

示例代码:

struct ContentView: View {
    public var body: some View {
        NavigationView {
            Text("Hello World")
                .navigationBarTitleView(MyView())
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这很好用,但为了使“边距”与系统导航栏一致,我还需要链接 `.navigationBarTitle("", displayMode: .inline)` 。 (2认同)

Jit*_*iya 8

简单,只需将您的根视图添加到 ZStack 顶部对齐并在根视图之后添加您的自定义中心视图

struct CenterNavigattionBar: View {
    var body: some View {
        ZStack(alignment: .top){
            //Root view with empty Title
            NavigationView {
                Text("Test Navigation")
                .navigationBarTitle("",displayMode: .inline)
                .navigationBarItems(leading: Text("Cancle"), trailing: Text("Done"))
            }
            //Your Custom Title
            VStack{
                Text("add title and")
                    .font(.headline)
                Text("subtitle here")
                    .font(.subheadline)
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

前图像

1

后图像

2


Joh*_* M. 1

目前,你不能。

两个 重载.navigationBarTitle(),采用符合Text的视图或类型StringProtocol。您甚至无法传递修改后的视图,例如Text("Title").font(.body). 这将是一个很棒的功能,我会提交一个功能请求: http: //feedbackassistant.apple.com