Ios Swift:动态刷新选项卡栏背景颜色

Ios Swift:动态刷新选项卡栏背景颜色,ios,swift,uitabbarcontroller,Ios,Swift,Uitabbarcontroller,我创建了一个配置管理器来更新UI设置,而无需重新启动。大多数设置都可以强制重画,但选项卡栏的限制似乎更大 当我收到配置更改通知时(注意:这可能是viewDidLoad之后的任何时间),我会用以下内容更新我的uitabarcontroller中的选项卡栏: 这会更新颜色,但仅在大约5-10秒后 我尝试了各种方法,在选项卡栏和视图上使用setNeedsLayout和setNeedsDisplay强制更新,但都不起作用 self.tabBar.setNeedsLayout() self.tabBar.

我创建了一个配置管理器来更新UI设置,而无需重新启动。大多数设置都可以强制重画,但选项卡栏的限制似乎更大

当我收到配置更改通知时(注意:这可能是
viewDidLoad
之后的任何时间),我会用以下内容更新我的
uitabarcontroller
中的选项卡栏:

这会更新颜色,但仅在大约5-10秒后

我尝试了各种方法,在选项卡栏和视图上使用
setNeedsLayout
setNeedsDisplay
强制更新,但都不起作用

self.tabBar.setNeedsLayout()
self.tabBar.setNeedsDisplay()

self.view.setNeedsLayout()
self.view.setNeedsDisplay()

我还尝试过更新单个选项卡栏项目,因为我看到其他人在更新图像时也遇到类似问题,但没有效果。

请确保您正在更新主线程上的背景色

   DispatchQueue.main.async { [weak self] in
     self?.tabBar.backgroundColor = tabBarBackgroundColour
   }

您确定要从主线程更新颜色吗?我记得,如果你从后台线程更新UI,有时会延迟绘图…为什么你需要[弱自我]加入?你为什么不使用[无主的自我]?或者更好,为什么不仅仅是DispatchQueue.main.async{self?.tabBar.backgroundColor=tabbarbackgroundcolor}
   DispatchQueue.main.async { [weak self] in
     self?.tabBar.backgroundColor = tabBarBackgroundColour
   }