如何更改 iOS 13 导航栏中的后退按钮图像?
Posted
技术标签:
【中文标题】如何更改 iOS 13 导航栏中的后退按钮图像?【英文标题】:How can I change the back button image in the navigation bar for iOS 13? 【发布时间】:2019-09-11 08:03:35 【问题描述】:On the right, the first time and on the left, all the other times
大家好,我是新人,所以我希望这就是这里的情况!
众所周知,ios 13 引入了 UI 更改。我们有一个正在生产的应用程序,我最近醒来(可能有点太晚了哈哈),当我在新更新的 iOS 13 设备上编译并启动它时,我意识到还有一些工作要做!我通过不启用它来处理暗模式,我处理了我的模态,但有一件事我似乎无法像 iOS 12 那样制作,那就是我的导航栏 UI。
我们使用自定义的后退按钮图像,经过几个小时的战斗,我终于成功了,但除了第一次之外,每次都可以。我第一次总是有默认图标,然后当我回到同一个控制器时,没关系。
这是一张照片(在问题的开头),因此您可以理解我的代码! 我知道可以使用“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()
我在这里基本上疯了,我想我遗漏了一些非常明显的东西,所以如果你们除了苹果文档之外还有任何提示或线索,请随时分享:)
提前致谢!
【问题讨论】:
【参考方案1】:在 iOS 13 中,您只能通过函数设置返回按钮图像和过渡蒙版图像
func setBackIndicatorImage(UIImage?, transitionMaskImage: UIImage?)
这是一个例子
standartAppearence.setBackIndicatorImage(#imageLiteral(resourceName: "backButton"), transitionMaskImage: #imageLiteral(resourceName: "backButton"))
【讨论】:
以上是关于如何更改 iOS 13 导航栏中的后退按钮图像?的主要内容,如果未能解决你的问题,请参考以下文章