导航栏图像如何居中 [Swift]

How center a Navigation Bar Image [Swift]

在我的项目中,我有一个带按钮的导航栏,用于打开幻灯片菜单。 现在我正在尝试设置标题图像而不是标题字符串。不太可能图像被稍微向右推而不是居中。我认为这是因为导航栏左角的幻灯片菜单按钮。如果我在 main.storyboard 中设置标题,一切看起来都正常。为什么会这样,我的图片不居中

图像函数:

func addNavBarImage() {

    let navController = navigationController!

    let image = UIImage(named: "TransparentLogo")
    let imageView = UIImageView(image: image)

    let bannerWidth = navController.navigationBar.frame.size.width
    let bannerHeight = navController.navigationBar.frame.size.height

    let bannerX = bannerWidth - image!.size.width
    let bannerY = bannerHeight - image!.size.height
    imageView.frame = CGRect(x: bannerX, y: bannerY, width: bannerWidth, height: bannerHeight)
    imageView.contentMode = .scaleAspectFit

    navigationItem.titleView = imageView
}

按钮功能:

func addSlideMenuButton(){
    let btnShowMenu = UIButton(type: UIButton.ButtonType.system)
    btnShowMenu.setImage(self.defaultMenuImage(), for: UIControl.State())
    btnShowMenu.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    btnShowMenu.addTarget(self, action: #selector(BaseViewController.onSlideMenuButtonPressed(_:)), for: UIControl.Event.touchUpInside)
    btnShowMenu.tintColor = UIColor(red: 3, green: 49, blue: 79)
    let customBarItem = UIBarButtonItem(customView: btnShowMenu)
    self.navigationItem.leftBarButtonItem = customBarItem;

}

像这样在 func addNavBarImage() 中更改 titleView 的框架:-

func addNavBarImage() {

let navController = navigationController!

let image = UIImage(named: "TransparentLogo")
let imageView = UIImageView(image: image)

let bannerWidth = navController.navigationBar.frame.size.width
let bannerHeight = navController.navigationBar.frame.size.height

let bannerX = bannerWidth - image!.size.width
let bannerY = bannerHeight - image!.size.height
imageView.frame = CGRect(x: bannerX, y: bannerY, width: bannerWidth, height: bannerHeight)
imageView.contentMode = .scaleAspectFit

navigationItem.titleView = imageView
}

至此

func addNavBarImage() {
let imageView = UIImageView(image: #imageLiteral(resourceName: "TransparentLogo"))
imageView.frame = CGRect(x: 0, y: 0, width: 170, height: 30)
imageView.contentMode = .scaleAspectFit

let titleView = UIView(frame: CGRect(x: 0, y: 0, width: 170, height: 30))

titleView.addSubview(imageView)
titleView.backgroundColor = .clear
self.navigationItem.titleView = titleView
}
func centeredNavBarImageView() {
    if let navcontroller = navigationController {
        let image = #imageLiteral(resourceName: "logo")
        let imageView = UIImageView(image: image)

        let bannerWidth = navcontroller.navigationItem.accessibilityFrame.size.width
        let bannerHeight = navcontroller.navigationBar.frame.size.height
        let bannerX = bannerWidth / 2 - image.size.width / 2
        let bannerY = bannerHeight / 2 - image.size.height / 2

        imageView.frame = CGRect(x: bannerX, y: bannerY, width: bannerWidth, height: bannerHeight)
        imageView.contentMode = .scaleAspectFit

        self.navigationItem.titleView = imageView
    }