ios - 是否可以手动设置/切换每个应用程序的 UserInterfaceStyle/暗模式?

标签 ios ios-darkmode uitraitcollection uiuserinterfacestyle

在 iOS 13 上使用时,我已更新我的 iOS 11+ 以支持暗模式。当在设备设置中启用或禁用 UserInterfaceStyle/暗模式时,这可以正常工作。

但是,我想为用户提供仅为我的应用程序激活/停用暗模式的选项。

使用开关覆盖/切换 UserInterfaceStyle当前应用程序窗口的大小没什么大不了的:

if #available(iOS 13.0, *) {
    for window in UIApplication.shared.windows {
        window.overrideUserInterfaceStyle = (uiStyleSwitch.isOn ? .dark : .light)
    }
}

但是这种方法有两个缺点:
  • 我想在暗模式、亮模式和系统首选项之间切换,其中前两个在当前系统设置上强制使用一种或另一种模式,第三个使用系统设置。但是如何在 overrideUserInterfaceStyle 之后返回“使用系统设置”?已经设置好了?使用 .unspecified似乎有效,但行为并未真正记录在案。是不是省着用?可以使用 .uspecified 解决(见评论)
  • 这仅适用于当前可用的窗口。但是,不同的 3rd 方控件和库会创建自己的窗口(例如,显示 toast 消息、弹出窗口等)。由于我无法控制这些窗口的创建,我无法覆盖它们的样式。

  • 所以问题是:是否可以为整个应用程序动态覆盖 UserInterfaceStyle ?

    我知道我可以选择Info.plist中的样式但这当然不能由用户更改。

    最佳答案

    使用 .unspecified 恢复为界面样式的系统设置。

    Choose this option when you want to follow the system's interface style



    至于您问题的另一部分,它可能取决于呈现的内容以及您可以访问的回调。

    关于ios - 是否可以手动设置/切换每个应用程序的 UserInterfaceStyle/暗模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58344163/

    相关文章:

    ios - 无法将 moveRowAtIndexPath 用于 tableView

    ios - 如何根据暗/亮模式设置默认标签颜色(在 Swift 中)

    ios13 - 深色模式和多窗口/场景

    ios - 如何使用我的应用程序中使用的自定义颜色轻松支持浅色和深色模式?

    ios - 测试特定 iPhone 是否支持扩展模式下的分割 View

    iphone - 如何保证核心数据实体的单一实例

    ios - 如何在点击另一行时取消选择一行?

    iOS 动画两个 View ,彼此堆叠

    ios - UIView 的 shadowpath 颜色没有改变

    iOS 13 暗模式 : UIColor. 用于 NSAttributedString 时链接太暗