UINavigationBar barTintColor基于API调用的值

问题描述

现在已经搜寻了一段时间,但找不到答案。

我有一个应用,希望导航栏的背景成为公司的品牌颜色。我们产品上的每个业务部门都可以选择添加自定义品牌,我们希望在UINavigationBar背景中显示此信息。我需要以下内容

  1. 用户通过应用程序移动时,他们会在首页(例如列表视图等)中拥有我们产品的主要品牌
  2. 用户点击内容并将其从列表视图(推入NavigationController)转到详细信息视图时,他们应该在导航栏中看到自定义业务品牌。
  3. 当他们弹出详细信息视图时,品牌应该再次恢复到我们产品的主要品牌。

我到处都读到我应该在viewWillAppear方法中设置背景色,但是那时API调用还没有完成,并且VC尚未“知道”公司的品牌颜色。我有以下方法将样式应用于UINavigationBar,这是UINavigationBar的扩展:

    func applyStyle(background: UIColor,backgroundFallback: UIColor,tintColor: UIColor) {
        if #available(iOS 13.0,*) {
            let style = UINavigationBarappearance()
            style.backgroundColor = background
            style.titleTextAttributes = [
                NSAttributedString.Key.font: UIFont(name: "futura",size: 17)!,NSAttributedString.Key.foregroundColor: tintColor
            ]
            self.standardAppearance = style
        } else {
            self.barTintColor = backgroundFallback
            self.barStyle = .black
            self.tintColor = tintColor
            self.isTranslucent = false
            self.titleTextAttributes = [
                NSAttributedString.Key.font: UIFont(name: "futura",NSAttributedString.Key.foregroundColor: tintColor
            ]
        }
    }

当我在viewWillAppear中以手动颜色使用它时,它可以很好地工作,但是当我在服务器调用完成时触发的自定义setupView方法中对其进行设置时,则存在不一致之处:

  • 有时它显示正确的颜色,有时它使用以前的viewController中的颜色。当我在谈论父级和VC时(我在导航控制器上按入)时,我第一次按下它就可以了,当我再次弹出并推入时,尽管我的applyStyle并没有设置导航栏样式方法,我可以在控制台中看到它。

这是错误还是应该以不同的方式处理?预先感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...