如何在UIViewController中添加带有图像而不是标题的导航栏?

时间:2019-01-27 20:46:30

标签: ios swift uinavigationbar

目前这是我所拥有的:

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNavigationBar()
}

func setNavigationBar() {
    let screenSize: CGRect = UIScreen.main.bounds
    let navBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: screenSize.width, height: 44))
    let navItem = UINavigationItem(title: "")
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: nil, action: #selector(done))
    navItem.rightBarButtonItem = doneItem
    navBar.setItems([navItem], animated: false)
    self.view.addSubview(navBar)
}

@objc func done() { // remove @objc for Swift 3

问题在于,条形标题似乎偏离中心并且条形非常细。

如何用图像代替标题来使其更厚一些?

更新:

第一个建议似乎无济​​于事。这是为什么?这是第一个视图控制器。

完整代码:

import UIKit
import Firebase
import FirebaseAuth


class LoginViewController: UIViewController {
@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var passwordField: UITextField!

@IBOutlet weak var gifView: UIImageView!

private var ref: DatabaseReference!

override func viewDidLoad() {


    let logo = UIImage(named: "q-small.png")
    let imageView = UIImageView(image:logo)
    self.navigationItem.titleView = imageView

    gifView.loadGif(name: "truck-animation")
    super.viewDidLoad()

    ref = Database.database().reference()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

2 个答案:

答案 0 :(得分:0)

这类似于Swift Navigation Bar Image Title

只需使用以下代码:

newtype

答案 1 :(得分:0)

似乎您正在以编程方式创建UINavigationBar,并且我还假设您正在使用情节提要创建应用。

self.navigationItem返回您ViewController的导航项。但是根据您的代码,您必须仅创建UINavigationBar。因此,要获得标题视图,您需要UINavigationController中的ViewController

如果这是您的第一个应用视图,则可以通过将ViewController嵌入到Storyboard中到导航控制器中来进行添加,而不必以编程方式添加导航栏。

之后,您可以在viewDidLoad()中使用此代码。

let logo = UIImage(named: "logo.png")
let imageView = UIImageView(image:logo)
self.navigationItem.titleView = imageView