ios - 为什么为 UINavigationItem 设置自定义 backBarButtonItem 会导致出现双后退按钮?

标签 ios swift uinavigationcontroller uibarbuttonitem uinavigationitem

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

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

    navigationItem.backBarButtonItem = backButton

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

但是,当我将新的 View Controller 插入堆栈时,导航栏会同时绘制新的自定义后退图标系统后退图标。

这是我看到的:

result

这是我期望的样子:

Expected result

最佳答案

你可以隐藏后退按钮

navigationItem.hidesBackButton = true

并使用 leftBarButtonItem 自定义 UIBarButtonItem

更新

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)
    }
}

关于ios - 为什么为 UINavigationItem 设置自定义 backBarButtonItem 会导致出现双后退按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67297647/

相关文章:

ios - 最小化窗口动画,但对于 iOS?

ios - 快速将自定义控件添加到 AVPlayer

iphone - 不使用 UINavigationController 在 UITabbarController 中显示完整 View

swift - block 中的变量范围

arrays - 如何将变量的值设置为字典键值中的数组?

ios - 将信息从 UINavigationController 传递到嵌入式 UIViewController

objective-c - 同时引用源 View Controller 和目标 View Controller

ios - 如何处理 NSExtensionActivationRule is truepredicate?

ios - Swift:为什么我的 -1 按钮不能正常工作?

ios - 无法以编程方式将 ipAd 添加到 Spritekit Swift