选择暗模式后如何重新加载视图?

时间:2019-03-04 18:40:18

标签: ios swift

我正在使用此广告连播为我的应用添加暗模式。 https://github.com/draveness/NightNight

当我再次重新启动应用程序时,它运行良好,但是我想更改应用程序内的主题。因此,我将UISwitch添加到了侧面板中,以便用户可以更改主题。

我为此添加了代码,有些颜色变化不错,但有些颜色不受影响。例如,导航栏的背景颜色变化很好,但标题颜色没有变化。

UISwitch操作:

@IBAction func switchMode(_ sender: UISwitch) {

        if sender.isOn {
            switcher.isOn =  true

                NightNight.theme = NightNight.Theme.night
                UITabBar.appearance().barTintColor = UIColor(hexString: "#141d27")
                UITabBar.appearance().isTranslucent = true
                UITabBar.appearance().tintColor = UIColor(hexString: "#6e00ff")
                UINavigationBar.appearance().tintColor = UIColor(hexString: "#6e00ff")
                UINavigationBar.appearance().isTranslucent = true
                UINavigationBar.appearance().barTintColor = UIColor(hexString: "#141d27")


            for window in UIApplication.shared.windows {
                for view in window.subviews {
                    view.removeFromSuperview()
                    window.addSubview(view)
                }
            }

                UserDefaults.standard.set("night", forKey: "colormode")



        } else {
            switcher.isOn =  false

            NightNight.theme = NightNight.Theme.normal
            UITabBar.appearance().barTintColor = UIColor.white
            UITabBar.appearance().isTranslucent = true
            UITabBar.appearance().tintColor = UIColor(hexString: "#6e00ff")
            UINavigationBar.appearance().tintColor = UIColor(hexString: "#6e00ff")
            UINavigationBar.appearance().isTranslucent = true
            UINavigationBar.appearance().barTintColor = UIColor.white

            for window in UIApplication.shared.windows {
                for view in window.subviews {
                    view.removeFromSuperview()
                    window.addSubview(view)
                }
            }

            UserDefaults.standard.set("normal", forKey: "colormode")


        }

    }

enter image description here

enter image description here

enter image description here

enter image description here

通常在浅色模式下,灰色文本颜色(用户的名称和导航标题)必须为黑色,但它们不会改变。

2 个答案:

答案 0 :(得分:1)

view mode 改变时使用回调。 按预期更改颜色。

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    // do whatever you want to do 
}

答案 1 :(得分:0)

签出RxSwift和RxCocoa。它们都可以在here中找到。它们是Swift中的反应式编程的反应式框架。您可以根据需要创建可观察对象以被动地更改视图的颜色。