如何更改 iOS 13 导航栏中的后退按钮图像?

gha*_*ais 6 uinavigationbar uikit ios swift ios13

在右边,第一次,在左边,所有其他时间

大家好,??我是新来的,所以我希望事情就是这样!

众所周知,iOS 13 引入了 UI 更改。我们有一个正在生产的应用程序,我最近醒来(可能有点太晚了哈哈),当我在新更新的 iOS 13 设备上编译和启动它时,我意识到有一些工作要做!??我通过不启用它来处理暗模式,我处理了我的模态,但有一件事我似乎无法像 iOS 12 那样做,那就是我的导航栏 UI。

我们使用自定义的后退按钮图像,经过几个小时的战斗,我终于成功了,但除了第一次之外,每次都可以。我第一次总是使用默认图标,然后当我回到同一个控制器时,就可以了。

这是一张照片(在问题的开头)所以你可以理解我的代码!?我知道可以将 Appearance 用于带有 « whenContained » 的特定 VC,但我似乎无法弄清楚,因为它全部在导航控制器中,我不知道如何区分它们。

fileprivate func navigationBarWithBackgroundColor(_ backgroundColor: UIColor, TintColor tintColor: UIColor, displayBackButtonIfNeeded: Bool, BackImage imageName:String, displayShadowBar: Bool = false) {

        let backButtonImage = UIImage(named: imageName)

        if #available(iOS 13.0, *) {

            let appearance = UINavigationBarAppearance()
            appearance.backgroundColor = backgroundColor

            appearance.titleTextAttributes = [.foregroundColor: tintColor]
            appearance.setBackIndicatorImage(backButtonImage, transitionMaskImage: backButtonImage)
            appearance.shadowImage = displayShadowBar ? UIImage(named:"") : UIImage()

            let back = UIBarButtonItemAppearance()
            // hide back button text
            back.normal.titleTextAttributes = [.foregroundColor: UIColor.clear]
            appearance.backButtonAppearance = back

            navigationController?.navigationBar.tintColor = tintColor
            navigationController?.navigationBar.standardAppearance = appearance
            navigationController?.navigationBar.compactAppearance = appearance
            navigationController?.navigationBar.scrollEdgeAppearance = appearance

        } else {
            if displayBackButtonIfNeeded {
                self.navigationController?.navigationBar.backIndicatorImage = backButtonImage
                self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = backButtonImage
                self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItem.Style.plain, target: nil, action: nil)

            } else {
                self.navigationItem.setHidesBackButton(true, animated: false)
            }

            self.navigationController?.navigationBar.barTintColor = backgroundColor
            self.navigationController?.navigationBar.tintColor = tintColor
            self.navigationController?.navigationBar.setBackgroundImage(UIImage(named:""), for: UIBarMetrics.default)
            self.navigationController?.navigationBar.shadowImage = displayShadowBar ? UIImage(named:"") : UIImage()
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在这里基本上变得疯狂,我想我遗漏了一些非常明显的东西,所以如果你们有任何提示或线索,除了苹果文档,请随时分享:)

?提前致谢 !

小智 7

在iOS 13中,您只能通过该功能设置后退按钮图像和过渡蒙版图像

func setBackIndicatorImage(UIImage?, transitionMaskImage: UIImage?)
Run Code Online (Sandbox Code Playgroud)

这是一个例子

standartAppearence.setBackIndicatorImage(#imageLiteral(resourceName: "backButton"), transitionMaskImage: #imageLiteral(resourceName: "backButton"))
Run Code Online (Sandbox Code Playgroud)