【问题标题】:How to implement DarkMode Into app in Swift如何在 Swift 中将 DarkMode 实现到应用程序中
【发布时间】:2020-07-14 05:10:20
【问题描述】:

很抱歉,如果有人问过这个问题,但在 stackOverFlow 中找不到正确的答案,所以我问..

我正在尝试在我的应用程序中实现暗模式,但不幸的是,它在使用 tableviews 时对我来说效果不佳,它确实改变了我的背景和内容,但我无法改变我的组的颜色表格视图。

这里有一张图片来说明这个问题: https://imgur.com/a/h4A3zOZ(这里不能上传,太大了)。

这也是我的代码:

// MARK: - Premium Section - DarkMode + Graph:
    @IBAction func darkModeSwitch(_ sender: UISwitch) {
        let current = sender.isOn ? Theme.dark : Theme.light
        
        
        if #available(iOS 13.0, *)  {
//            overrideUserInterfaceStyle = UIUserInterfaceStyle(rawValue: current.stateMode)!
            //STEP1: Saving User Defaults Switcher:
            saveSwitchToggleDarkMode(switcherState: sender.isOn)
                //STEP2: Setting UI Colors Of Settings View:
                self.tableView.backgroundColor = current.backgroundColor
                ///Setting up the barTint Color:
                self.navigationController?.navigationBar.barTintColor = current.barTintColor
                ///Setting up the title text color:
                self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor:current.textColor]
                ///Changing back color in navigation controller:
                self.navigationController?.navigationBar.backItem?.backBarButtonItem?.tintColor = current.backItemColor
                
        }
    }

【问题讨论】:

    标签: swift user-interface ios-darkmode


    【解决方案1】:

    您应该更改窗口级别的模式以将更改应用于所有控件,例如:

    if #available(iOS 13, *) {
       UIApplication.shared.delegate?.window??.overrideUserInterfaceStyle = .dark
    }
    

    【讨论】:

    • 有一种方法可以通过一个切换器将我的所有视图更改为暗模式?
    • @AviSabag 是的,它会改变您应用的所有 UI 模式。
    • 但如果您选择背景颜色为白色,则它不起作用。尝试为您有问题的视图设置背景颜色,用系统背景颜色替换白色
    • @asilturk 当然它不适用于手动设置颜色,但它适用于 UITableView 等中的所有默认颜色。
    【解决方案2】:

    实现暗模式的另一种(也许更简单)的方法是使用可以在设置中触发的 iOS 暗模式功能。如果要实现此功能,可以通过转到 Assets.xcassets 创建自定义颜色集并按下底部的加号 - >新颜色集。在属性检查器上,在名称下命名您的颜色,在外观下,选择“任何、浅色、深色”,现在您将拥有 3 种不同颜色的位置。在 Light 下,放置浅色模式颜色,在深色下,放置深色模式颜色。

    然后在您希望实现此颜色的地方,您可以将颜色更改为情节提要中的自定义颜色,如下所示:-

    或者您可以在代码中更改它,例如

    myButton.backgroundColor = UIColor(named: "TestColor")

    当用户通过控制中心或设置触发暗模式时,应用也会自动进行相应的更改。您可以通过转到设置 -> 开发人员 -> 深色外观或转到功能 -> 切换外观或简单地按 Shift + Command + A 来测试它

    但是这种方法意味着你不会有一个独立的暗模式,因为它只会在设备本身启用暗模式时触发。

    【讨论】:

    • @Avi Sabag 试试这个,告诉我这是否适合你
    • 会配合 :) 感谢您的帮助,现在尝试一下,顺便说一句,我不想​​更改按钮,我想让用户将外观更改为暗模式 :)
    • 它有点工作,我的意思是当我切换切换器时它不会将背景变为黑色
    • 如果您决定使用它,您将必须在您需要更改的所有内容中实现类似的东西:/。此外,用户可以通过控制中心或设置来切换暗模式,而不是通过切换器。如果你这样做,一切都会自动变为暗模式:)。测试时,您必须通过设置(在开发人员中)执行此操作,或者您可以在功能或 shift + Command + A 中切换外观
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2014-08-23
    • 1970-01-01
    • 2015-12-22
    • 2020-10-11
    • 2019-03-19
    • 2016-11-24
    相关资源
    最近更新 更多