繁体   English   中英

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

[英]How can I change the back button image in the navigation bar for iOS 13?

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

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

众所周知,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()
        }
    }

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

提前致谢 !

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

func setBackIndicatorImage(UIImage?, transitionMaskImage: UIImage?)

这是一个例子

standartAppearence.setBackIndicatorImage(#imageLiteral(resourceName: "backButton"), transitionMaskImage: #imageLiteral(resourceName: "backButton"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM