更改应用程序主题时更改 UITabbar?

Changing UITabbar when the app theme is being changed?

我想为一个应用程序支持 2 个主题。一光一暗。所以,我有一个 UIButton 允许用户点击它并在浅色和深色主题之间切换。

UITabBar 有自己的 class,我已将其设置为根据当前主题进行相应更改,但它不起作用。不确定我做错了什么。

class MainTabbar: UITabBarController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.tabBar.barTintColor = Theme.current.tabbarTintColor
        self.tabBar.tintColor = Theme.current.tabbarSelectedItems
        self.tabBar.unselectedItemTintColor = Theme.current.tabbarUnselectedItemsColor
    }
}

AppDelegate文件中,我检查是否有选择的主题,如果没有,设置LightTheme

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
 // Set Theme
 if UserDefaults.standard.object(forKey: SelectedThemeKey) != nil {
        Theme.current = UserDefaults.standard.bool(forKey: SelectedThemeKey) ? LightTheme() : DarkTheme()
        print("current theme is: \(Theme.current)")
    }
 }

截至目前,它只会更改 UITabbar 如果应用程序正在重新启动的颜色。

更改应用主题后,您需要在任何选项卡内的任何位置访问这些内容

self.tabBarController.tabBar.barTintColor = Theme.current.tabbarTintColor
self.tabBarController.tabBar.tintColor = Theme.current.tabbarSelectedItems
self.tabBarController.tabBar.unselectedItemTintColor = Theme.current.tabbarUnselectedItemsColor

//

或者如果根是 tabController

let tab = UIApplication.shared.keyWindow?.rootViewController as! UITabBarController