从Firebase获取值时如何更改NavBar标题颜色

时间:2019-05-15 05:21:33

标签: swift firebase firebase-realtime-database uinavigationcontroller

我正在使用Bool从Firebase获取在线状态。提取值后,NavBar标题颜色应根据离线或在线状态更改为绿色或黑色。

但是,当我得到该值时,它当前正在更改标题,但是只有在按下返回按钮后,NavBar标题颜色才执行颜色更改。 (我想在当前视图上立即更新,而不是在按下时进行更新,顺便说一下,整个层次结构都在更改,我只想更改该视图的当前标题。

ViewDidLoad进行呼叫

Swift 5,Firebase 6

func fetchOnlineStatus() {
        let navBar = self.navigationController?.navigationBar
        DB_REF.child("Users").child(user?.uid ?? "").child("online").observe(DataEventType.value) { (snapshot) in
            let postDict = snapshot.value as? Bool
            if postDict == true {
                    navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.green]
                        navBar?.setNeedsDisplay()
                        navBar?.layoutIfNeeded()
                        navBar?.setNeedsDisplay()
                        self.collectionView.reloadData()
                        self.collectionView.setNeedsDisplay()
                        self.collectionView.layoutIfNeeded()
            } else {
                print("false")
                let changeColor = [NSAttributedString.Key.foregroundColor:UIColor.black]
                self.navigationController?.navigationBar.titleTextAttributes = changeColor
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

尝试更改主线程上的NavBar标题颜色:

 DispatchQueue.main.async {
    navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.green]
    navBar?.setNeedsDisplay()
    navBar?.layoutIfNeeded()
    navBar?.setNeedsDisplay()
 }