7

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

navigationItem.titleView = UIImageView(image: UIImage(named: "logo"))

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

有人知道怎么做吗?

4

6 回答 6

9

这是如何做到的:

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

示例代码:

struct ContentView: View {
    public var body: some View {
        NavigationView {
            Text("Hello World")
                .navigationBarTitleView(MyView())
        }
    }
}
于 2020-02-18T15:46:09.663 回答
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)
            }
        }

    }
}

图像之前

1

后像

2

于 2020-05-25T06:34:49.500 回答
3

只需使用工具栏。您可以添加任何视图

  import SwiftUI

  struct HomeView: View {

  // MARK: - Initializer
  init() {
      let appearance = UINavigationBar.appearance()
      appearance.isOpaque      = true
      appearance.isTranslucent = false
      appearance.barTintColor  = UIColor(named: "background")
      appearance.shadowImage   = UIImage()
  }


  // MARK: - View
  // MARK: Public
  var body: some View {
      NavigationView {
          VStack(spacing: 20) {
              Text("Hello")
            
              Text("Navigation Bar Test")
          }
          .navigationBarTitleDisplayMode(.inline)
          .navigationBarItems(leading: leadingBarButtonItems, trailing: trailingBarButtonItems)
          .toolbar {
              ToolbarItem(placement: .principal) {
                  VStack {
                      Text("Title").font(.headline)
                      Text("Subtitle").font(.subheadline)
                  }
              }
            
          }
      }
  }

  // MARK: Private
  private var leadingBarButtonItems: some View {
      Button(action: {
        
      }) {
          Text("Left Button")
              .font(.system(size: 12, weight: .medium))
      }
  }

  private var trailingBarButtonItems: some View {
      HStack {
          Button(action: {
            
          }) {
               Text("R1\nButton")
                  .font(.system(size: 12, weight: .medium))
                  .multilineTextAlignment(.center)
          }

          Button(action: {
            
          }) {
              Text("R2\nButton")
                  .font(.system(size: 12, weight: .medium))
                  .multilineTextAlignment(.center)
          }
      }
  }
}

在此处输入图像描述

于 2021-01-05T05:39:53.713 回答
1

目前,你不能。

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

于 2019-10-22T16:24:01.607 回答
-1

也许这对你有用?

基本上:GeometryReader用于获取屏幕的宽度NavigationBarItems(leading: HStack {Spacer() Image("name").resizable().frame(width:..., height: ..., alignment: .center Spacer()}.frame(width:geometry.size.width)

示例代码:

struct ContentView: View {
    var body: some View {
        NavigationView {
            GeometryReader { geometry in
                Text("Hello, world!")
                    .padding()

                    .navigationTitle("test")

                    .navigationBarItems(leading: HStack {
                        Spacer()

                        Image("money")
                            .resizable()
                            .frame(width: 50, height: 50, alignment: .center)

                        Spacer()
                    }
                    .frame(width: geometry.size.width)
                    )
            }
        }
    }
}
于 2021-05-13T20:13:24.067 回答
-8

尝试这个...

如何在swiftui的NavigationView中放置一个标志?

这显示了如何在 SwiftUI 中处理将图像添加到 NavigationView。希望能帮助到你。

于 2019-10-22T13:23:42.950 回答