微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UINavigationBar barTintColor基于API调用的值

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?