我正在使用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
}
}
}
答案 0 :(得分:0)
尝试更改主线程上的NavBar标题颜色:
DispatchQueue.main.async {
navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.green]
navBar?.setNeedsDisplay()
navBar?.layoutIfNeeded()
navBar?.setNeedsDisplay()
}