首页 > 解决方案 > 为什么为 UINavigationItem 设置自定义 backBarButtonItem 会导致双后退按钮?

问题描述

我有一个非常简单的设置。具有根 UIViewController 的 UINavigationController 使用自定义后退按钮项修改其导航项viewDidLoad

    let backButton = UIBarButtonItem(image: backArrowImage,
                                     style: .plain,
                                     target: nil,
                                     action: nil)

    navigationItem.backBarButtonItem = backButton

我希望这会用标题默认的后退箭头图标完全替换系统后退按钮。

但是,当我在堆栈上推送新的视图控制器时,导航栏会同时绘制新的自定义后退图标系统后退图标。

这就是我所看到的:

结果

这就是我期望它的样子:

预期结果

标签: iosswiftuinavigationcontrolleruibarbuttonitemuinavigationitem

解决方案


您可以隐藏后退按钮

navigationItem.hidesBackButton = true

leftBarButtonItem用于自定义UIBarButtonItem

UPD

import UIKit

final class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.hidesBackButton = true
        let backItem = UIBarButtonItem(image: backArrowImage, style: .plain, target: self, action: #selector(backButtonPressed))
        navigationItem.leftBarButtonItem = backItem
    }

    @objc func backButtonPressed() {
        navigationController?.popViewController(animated: true)
    }
}

推荐阅读