1

在 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(见评论)

  • 这仅适用于当前可用的窗口。但是,不同的第 3 方控件和库会创建自己的窗口(例如显示 toast 消息、弹出窗口等)。由于我无法控制这些窗口的创建,我无法覆盖它们的样式。

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

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

4

1 回答 1

3

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

当您想遵循系统的界面风格时选择此选项

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

于 2019-10-11T15:33:51.197 回答